MYSQL主从同步的实现
原理
MYSQL的主从同步是在MYSQL的主从复制(master-slave Replication)的基础上实现的。其实现方式:
- 设置主服务器的binlog使其在开启状态下;
- Slave mysql 通过一个I/O线程来获取主服务器的binlog文件,然后传输到Slave mysql的中继日志中
- Slave mysql 的SQL线程读取中继日志中的binlog,还原到Slave mysql数据库中。
主从数据库版本一致
库中数据一致
Master服务器配置
修改配置文件my.cnf
#日志名
log-bin = mysql-bin
#主数据库ID
server-id = 1
重启MYSQL服务,创建用于主从同步的用户
mysql> grant replicate slave on *.* to 'user'@'%' identified by '123456';
mysql> flush privileges;
查看主数据库状态
show master status;
+------------------+----------+--------------+------------------+
| File| Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000012 |327 | crm||
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
锁定主数据库,再不要进行操作
flush tables with read lock
减除表的锁
unlock tables;
slave 数据配置
修改my.cnf配置文件
server-id = 2
执行同步命令
mysql> change master to
-> master_host = '192.168.1.1',
-> master_user = 'mysql',
-> master_password = 'mysql',
-> master_log_file = 'mysql-bin.000012',
-> mastet_log_pos = 327;
#开启同步命令
start slave;
查看状态
show slave status \G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 60.205.105.99
Master_User: rep
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000012
Read_Master_Log_Pos: 327
Relay_Log_File: mysqld-relay-bin.000027
Relay_Log_Pos: 252
Relay_Master_Log_File: mysql-bin.000012
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 327
Relay_Log_Space: 554
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
1 row in set (0.00 sec)
如果:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
这两项都为Yes,则为正常状态,至此全部配置完成。
其他配置 master端
#不同步哪些数据库
binlog-ignore-db = mysql
binlog-ignore-db = test
#只同步哪些库
binlog-do-db = crm
#日志保留时间
expire_logs_days = 10
#控制binlog的写入频率,每执行多少次写入事务一次
#比较耗费资源,但可以减少mysql崩溃造成的损失。
sync_binlog = 5
#日志格式
binlog_format = mixed
slave端
#连接断开时,重新连接的超时时间
mysql> change master to master_connect_retry = 50
问题处理
Slave_SQL_Running: No
遇到这种情况有可能是事务回滚造成的,可以这样解决
mysql> stop salve;
mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1
mysql> start salve;
【MYSQL主从同步的实现】相关文章:MariaDB(mysql)之主从同步
推荐阅读
- Docker应用:容器间通信与Mariadb数据库主从复制
- py连接mysql
- 2019-01-18Mysql中主机名的问题
- Spectrum|Spectrum 区块偶尔停止同步问题排查与解决笔记
- MySql数据库备份与恢复
- mysql|InnoDB数据页结构
- mysql中视图事务索引与权限管理
- MySQL数据库的基本操作
- javaweb|基于Servlet+jsp+mysql开发javaWeb学生成绩管理系统
- Python3|Python3 MySQL 数据库连接