1 主从实现原理
MySQL主从又叫做Replication、AB复制。简单讲就是A和B两台机器做主从后,在A上写数据,另外一台B也会跟着写数据,两者数据实时同步;
MySQL主从是基于binlog的,主上须开启binlog才能进行主从。
主从过程大致有3个步骤
1)主将更改操作记录到binlog里;
2)从将主的binlog事件(sql语句)同步到从本机上并记录在relaylog里;
3)从根据relaylog里面的sql语句按顺序执行;
主上有一个log dump线程,用来和从的I/O线程传递binlog
从上有两个线程,其中I/O线程用来同步主的binlog并生成relaylog,另外一个SQL线程用来把relaylog里面的sql语句落地
注意: “主”“从”配置前,一定要确保两个数据库内容一样(“mysql”的库可以不用同步);若数据库中数据有差异,可使用“备份”、“恢复备份”的方法,手动将两个数据库内容同步;“mysql”的库可以不用同步
2 “主” 配置
- 安装mysql/mariadb;(具体安装步骤,此处忽略)
- 修改数据库配置文件 my.cnf,
vim /etc/my.cnf
增加
server-id=250
# server id 无特殊要求,自行设置
log_bin=001
# binlog 前缀
重启mysqld服务
systemctl restart mariadb
- 创建用作同步数据的用户
grant replication slave on *.* to 'repl'@'172.16.1.51' identified by '123456';
- 锁定数据库
flush tables with read lock;
- 查看“主”状态信息;“从”配置需要用到File和Position信息
show master status;
3 “从”配置
安装mysql/mariadb;(具体安装步骤,此处忽略)
修改数据库配置文件 my.cnf,
vim /etc/my.cnf
增加
server-id=249
# server id 要求和“主”id不一样,无其他特殊要求
log_bin=002
# binlog 前缀
重启mysqld服务
systemctl restart mariadb
停止slave
stop slave;
-
配置“主”“从”连接
change master to master_host='172.16.1.51',master_user='repl',master_password='123456',master_log_file='001.000001',master_log_pos=245;
master_host:“主”IP地址;
master_user :用于同步的账户;
master_password :用于同步的密码
master_log_file:“主”状态信息中 “File” 的信息
master_log_pos:“主”状态信息中 “Position” 的信息 启动slave
start slave;
解除“主”数据库的锁定
unlock tables;
需要到“主”数据库中操作查看主从是否成功
“从”库中输入show slave status\G
查看从状态;查看“Slave_IO_Running”和“Slave_SQL_Running” 两项参数是否为“Yes”,如果有一项为“No”则说明“主”“从”不通,存在问题。
还需关注以下参数:
a. Seconds_Behind_Master: 0 #为主从延迟的时间
b. Last_IO_Errno: 0
c. Last_IO_Error:
d. Last_SQL_Errno: 0
e. Last_SQL_Error:
4 几个配置同步参数
1. “主”服务器上
binlog-do-db= #仅同步指定的库
binlog-ignore-db= #忽略指定库
2. “从”服务器上
replicate_do_db= #仅同步指定的库
replicate_ignore_db= #忽略指定库
replicate_do_table= #仅同步指定的表
replicate_ignore_table= #忽略指定表
replicate_wild_do_table= #同步指定的库和表 (如:aming.%, 支持通配符%)
replicate_wild_ignore_table= #忽略指定库和表
同步参数“主”“从”上均可设置,只要设置一个就可以了