MySQL5.5主从配置

一:实验环境
主机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;

如在输出中看到如下所示说明同步成功:

这里写图片描述

猜你喜欢

转载自blog.csdn.net/woaigaolaoshi/article/details/51721911