MySQL 主从说明
同步问题
mysqldump: 此工具适用于 10G 以下数据库或几个表
percona-Xtrabackup 备份工具: 适用于 100G-500G
LVM 快照: 更大的数据量, 或分库分表
主从复制目的
读写分离, 减轻主库负载或数据分析;
数据安全, 做备份恢复;
主从切换, 做高可用;
常见主从结构:
一主一从: 一个 Master, 一个 Slave
一主多从: 一个 Master, 多个 slave
Master 节点: 负责所有的 [写] 请求
Slave 节点: 负责大部分的 [读] 请求
主从复制步骤
A 数据更新
A 写入 Bin Log
A 的 io 线程与 B 的 io 线程传输通信
B 将传输的信息写入 Relay Log
B 检查到 Relay Log 有新内容后执行 SQL 语句
B 更新数据
MySQL 主从数据不同步处理
检查
master 库 (也就是主服务库)
- mysql>show processlist; // 查看进程是否 sleep 太多
- mysql>show master status; // 查看主服务器的 master 数据状态
Slave 库 (从库)
- mysql>show slave status\G // 查看 slave 的同步状况, 主要是 IO 与 SQL
- Slave_IO_Running: Yes
- Slave_SQL_Running: No
这两个必须是 yes 状态, 由此可见 slave 不同步状态
处理方案
方法一: 忽略错误, 继续同步
适用于主从库数据相差不大, 或者要求数据可以不完全统一的情况, 数据要求不严格的情况;
Slave 库修复
- mysql>stop slave; // 停止同步
- mysql>set global sql_slave_skip_counter =1; // 跳过一步错误
- mysql>start slave; // 开启同步
方法二: 重做主从, 完全同步
适用于主从库数据相差较大, 或者要求数据完全统一的情况;
master 库设置
- mysql>flush tables with read lock; // 锁定为只读, 防止数据写入
- mysqldump -uroot -p'123456' mysql> /tmp/mysql.bak.sql // 备份数据到目录
- mysql> show master status; // 查看 master 的状态, 写同步配置会用到相关数据
scp /tmp/mysql.bak.sql root@192.168.188.3:/tmp$/ 将 mysql 的备份文件传到从库机器
Slave 库设置
- mysql>stop slave; // 停止同步
- mysql>source /tmp/mysql.bak.sql // 使用备份就行恢复数据, 也可以使用 mysqldump 命令
- change master to master_host = '192.168.128.100', master_user = 'rsync', master_port=3306, master_password='', master_log_file ='mysqld-bin.000001', master_log_pos=3260; // 设置从库同步, 其中 log_file 与 log_pos 的参数来自于主服务的 show master status 里
- mysql>start slave; // 开启从同步
- mysql>show slave status\G // 查看同步状态
来源: http://www.bubuko.com/infodetail-2548757.html