一:实验环境
主机IP(Master) 192.168.101.28 centos下
从机IP(Slave) 192.168.100.39 window下
二:给Master授权允许远程登录的用户
1.向Master添加远程登录的用户
mysql>grant replication slave on "." to "repl"@"192.168.100.39" identified by "123456";
2.刷新授权
mysql>flush privileges;
3.查看授权结果:
mysql>show grants for "repl"@"192.168.100.39"
4.测试Slave远程登录Master
mysql -h 192.168.101.28 -u repl -p123456(注意-p后无空格)
5.Master端查看远程连接的客户端信息
mysql>show processlist
三:Master配置
vim /etc/my.cnf,如在/etc/下没有找到my.cnf,则去/usr/share/mysql下找到my-medium.cnf并复制到/etc/下改名为my.cnf
在my.cnf找到确认如下信息,如没有则手动添加:
[mysqld]
log-bin=mysql-bin # 确认开启binlog日志
binlog_format=mixed # 确认binlog日志格式为mixd混合类型
server-id=1 # 在整个主从架构内指定一个唯一的server-id
四:Slave配置
配置my.inf(我的Salve是在window下)
找到并确认如下信息,如没有则手动添加:
[mysqld]
log-bin=mysql-bin # 确认也开启binlog日志
binlog_format=mixed # 确认binlog日志格式为mixd混合类型
server-id=2 # 在整个主从架构内指定一个唯一的server-id
Slave其他可选配置:
1.白名单 - 只想复制某(些)个库:
replicate_do_db=testdb #只复制testdb库(可配置多个)
2.白名单 - 只想复制某(些)个库(的所有表)
replicate_wild_do_table=testdb.% #复制testdb库的所有表(可配置多个)
3.白名单 - 只想复制某(些)个库(的部分表)
replicate_wild_do_table=testdb.t1 #复制testdb.t1表
replicate_wild_do_table=testdb.t2 #复制testdb.t2表
4.黑名单 - 想忽略对mysql数据库的复制
replicate_ignore_db=mysql #不复制mysql库(可配置多个)
5.黑名单 - 想忽略对某些库的某些表的复制
replicate_wild_ignore_table=mysql.users # 不复制mysql.users表(可配置多个)
6.如果想实现“主-->从-->从”的链式架构,因为在默认情况下,从Master复制过来的数据不会写入到Slave的binlog日志里,而是写入中继日志(localhost-relay-bin.00000x)里,所以Slave如果还需要充当其它机器的Master,就将从Master复制来的数据同时也写入Slave的本地binlog日志,添加如下配置:
log-slave-updates =1
五:Master操作
mysql>flush logs(刷新Master日志记录)
mysql>show master status(查看主机最后日志文件和最后起始点)
六:Slave操作
1.在Slave上执行命令,动态改变连接到Master的配置,生成或更新master.info文件:
mysql> change master to master_host="192.168.101.28",
master_user='repl',
master_password='123456',
master_log_file='mysql-bin.000004',
master_log_pos=107;
可选配置:
master_heartbeat_period=60 #60秒探测一次Master是否在线
master_connect_retry=10 #无法连接Master的时候重试连接的间隔时间为10秒
3.启动IO线程(负责从Master端复制 mysql-bin.00000x 日志,并把复制来的数据全部都放到 localhost-relay-bin.00000n 日志里)和SQL线程(负责读取中继日志(relay-log.info)里的信息,将 localhost-relay-bin.00000n 日志里的数据写入本地Slave。),并查看Slave状态
mysql> start slave;
mysql> show slave status;
如在输出中看到如下所示说明同步成功:
注:如果开始的环境不是主从架构,而是跑了一段时间主(Master)机已经有了数据,可由如下方法解决:
1.在主机上拷贝以后Slave所要复制的数据库
mysql>mysqldump -u root -proot spider_copy > /root/spider.sql;
2.查看Master最新的binlog日志,并记录binlog日志名和pos点,Salve就从这里开始同步:
mysql>mysql -u root -p;
mysql>show master status;
3.将备份的文件在Slave上恢复:
mysql -uroot -proot -v < /root/spider.sql
4.在Slave上执行命令,动态改变连接到主(Master)机的配置,生成或更新master.info文件:
mysql> change master to master_host="192.168.101.28",
master_user='repl',
master_password='123456',
master_log_file='mysql-bin.000006',
master_log_pos=107;
mysql> start slave;
mysql> show slave status;
如在输出中看到如下所示说明同步成功: