主服务器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 statusG
注意看显示的参数,特别前面两个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 statusG
查看结果的结果,有两个关键性参数
- 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