1、节点以及网络配置
前置条件:
已经在linux上安装好了一主一从或者一主多从的mysql
2、具体配置
主服务器 172.20.0.2
从服务器 172.20.0.3
- 首先主机mysql配置:
打开mysqld.cnf:
添加如下配置:
# 主服务器ID 必须唯一
server-id=2
# 开启及设置二进制日志文件名称
log_bin=mysql-bin
# 要同步的数据库
binlog-do-db =db_java1234
# 不需要同步的数据库
binlog-ignore-db=mysql
binlog_ignore_db=information_schema
binlog_ignore_db=performation_schema
binlog_ignore_db=sys
# 设置logbin格式
binlog_format= MIXED # binlog日志格式,mysql默认采用statement,建议使用mixed
- 从服务器,打开mysqld.cnf:
server-id=3
relay-log=mysql-relay
- 在主服务器执行如下语句,需要单独创建一个用户及授权给从节点使用,用来同步数据。
依次执行如下语句:
CREATE USER 'slave1'@'172.20.0.3' IDENTIFIED BY '123456';
GRANT REPLICATION SLAVE ON *.* TO 'slave1'@'172.20.0.3';
FLUSH PRIVILEGES;
查看主服务器状态;
SHOW MASTER STATUS
4. 从机创建连接主服务器的IP,用户,密码以及日志文件和位置;
CHANGE MASTER TO MASTER_HOST='172.20.0.2', MASTER_USER='slave1', MASTER_PASSWORD='123456', MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=154;
启动主从复制
START SLAVE;
查看从机状态;
SHOW SLAVE STATUS
有两个yes才OK;
假如有 No 或者 Connecting,请看下方日志 或者找到Mysql日志文件查看具体问题;
3、binlog_format详解
mysql复制主要有三种方式:
1.基于SQL语句的复制(statement-based replication, SBR)
2.基于行的复制(row-based replication, RBR)
3.混合模式复制(mixed-based replication, MBR)
对应的,binlog的格式也有三种:STATEMENT,ROW,MIXED。
-
STATEMENT模式(SBR)
每一条会修改数据的sql语句会记录到binlog中。优点是并不需要记录每一条sql语句和每一行的数据变化,减少了binlog日志量,节约IO,提高性能。缺点是在某些情况下会导致master-slave中的数据不一致(如sleep()函数, last_insert_id(),以及user-defined functions(udf)等会出现问题)。 -
ROW模式(RBR)
不记录每条sql语句的上下文信息,仅需记录哪条数据被修改了,修改成什么样了。而且不会出现某些特定情况下的存储过程、或function、或trigger的调用和触发无法被正确复制的问题。缺点是会产生大量的日志,尤其是alter table的时候会让日志暴涨。 -
MIXED模式(MBR)
以上两种模式的混合使用,一般的复制使用STATEMENT模式保存binlog,对于STATEMENT模式无法复制的操作使用ROW模式保存binlog,MySQL会根据执行的SQL语句选择日志保存方式。