Mysql—主从复制

主服务器Master配置

一、修改配置文件,然后重启mysql服务

[mysqld]
server-id = 1               -- 唯一id
log-bin = mysql-bin              -- 定义主服务器的二进制文件名,指定日志文件。其中这两行是本来就有的,可以不用动,添加下面三行即可.
log-slave-updates = true         -- 允许从服务器进行同步更新
binlog-do-db = study_flask       -- 记录日志的数据库
binlog-ignore-db = mysql         -- 不记录日志的数据库
 
gtid_mode=on
enforce-gtid-consistency=true

二、查看主服务器状态

mysql> show master status;
mysql> show master status\G

注意看显示的参数,特别前面两个File和Position,在从服务器(Slave)配置主从关系会有用到的。这里的File的值为mysql-bin.000034,Position的值为191。

获取主数据库中此刻数据的位置,主要用于从数据启动后,复制数据的起始位置,但是在获取这个状态值之前,主数据库就不能再有数据的修改操作,所以需要先设置读锁定有效。

三、创建一个专门用于复制数据的用户

mysql> create user 'dong'@'%'
mysql> grant replication slave on *.* to 'dong'@'%'  identified by '123456!';
mysql> flush privileges;

从服务器Slave配置

一、修改配置文件,然后重启mysql服务

mysqld]
server-id = 2
log-bin = mysql-bin
replicate-do-db = study_flask
replicate-ignore-db = mysql,information_schema,performance_schema

gtid_mode=on
log-slave-updates=true
enforce-gtid-consistency=true

二、首先在主库上进行数据备份,然后启动从数据库,对主库备份的数据进行还原,这个时候主从数据库在备份那个时间点的数据是一致的。

备份的手段有很多种,备份结束后可以释放读锁,主库就可以进行写操作。将备份还原到slave后,使用change master to命令挂载master端。

三、停止slave从服务线程

mysql> stop slave;

四、用change mster 语句指定同步位置,切换slave到新的master

mysql> change master to
    -> master_host='192.168.1.56',
    -> master_port=3306,
    -> master_user='dong',
    -> master_password='123456!',
    -> master_log_file='mysql-bin.000034',
    -> master_log_pos=191;
    -> master_auto_position=1;

最后三行,要不使用前面两行,要不使用最后一行。5.6以后版本推荐使用最后一行。

五、启动slave从服务线程

mysql> start slave;

六、查看从服务器(Slave)状态

mysql> show slave status;   
mysql> show slave status\G

查看结果的结果,有两个关键性参数

  • Slave_IO_Running:yes
  • Slave_SQL_Running:yes

这两个线程前面有提到,是slave上参与复制过程中两个很重要的线程。YES表示正常,NO表示异常。

Slave_IO线程主要是将master上的binlong日志内容复制到slave的中继日志中(Relay_log),一般出现问题的概率不大, 出现问题大多数是因为权限或者网络等问题,导致连接不上master。

Slave_SQL线程负责将中继日志中的SQL执行一遍,相对来说出错的概率大些。如有人手动的在从库中插入一些记录,导致主从同步的时候出现主键冲突。

Slave_IO_STATE:Waiting for master to send event—这个状态表示中继日志同步完成,等待master有新的事件产生。

遇到的报错问题

1、Last_IO_Error: The slave IO thread stops because the master has @@GLOBAL.GTID_MODE ON and this server has @@GLOBAL.GTID_MODE OFF

gtid_mode=on
log-slave-updates=true
enforce-gtid-consistency=true

在从服务器的配置文件中加入上面的三项配置(此时主服务器的配置文件中已经存在上面的配置了)

如果主数据库不是空库,一般是先备份,记住binlog位置点,恢复到从库。主库备份把其他的连接全断了,避免新数据的写入。

一般是先保证主库不写入数据的情况下 备份主库在从库恢复 然后再执行同步命令。

https://www.jb51.net/article/137925.htm

https://blog.51cto.com/13706760/2171361

https://www.cnblogs.com/crazylqy/p/5542558.html

https://blog.csdn.net/u011976388/article/details/84777837

https://www.cnblogs.com/jianmingyuan/p/10903682.html

https://www.cnblogs.com/cocoxu1992/p/10670589.html

https://www.jianshu.com/p/faf0127f1cb2

https://blog.csdn.net/wmq880204/article/details/53160078

https://www.cnblogs.com/abobo/p/4242417.html

posted @ 2019-10-14 11:18  刘_love_田  阅读(258)  评论(0编辑  收藏  举报