mysql主从同步
原理:
master记录数据更改操作
- 启用binlog日志
- 设置binlog日志格式
- 设置server_id
slave运行2个线程
- Slave_IO:复制master主机binlog日志文件里面的SQL到本机的relay-log文件里
- Slave_SQL:执行本机的relay-log文件里的SQL语句,重现master的数据操作
构建:
确保数据相同
配置主服务器master
1.修改/etc/my.cnf
[mysqld] log_bin=master0 //启用binlog日志,并指定文件名前缀 server_id = 10 //指定服务器ID号 binlog-format='mixed' //指定日志格式(row,statement,mixed)
2.创建授权用户
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.4.%' IDENTIFIED BY 'pwd123';
3.查看master同步状态(当前日志文件名、偏移位置)
mysql> SHOW MASTER STATUS\G; mysql> show slave hosts; # 查看当前从库
配置从服务器slave
1.修改/etc/my.cnf
[mysqld] log_bin=slave1 //启动SQL日志,并指定文件名前缀 server_id = 20 //指定服务器ID号,不要与Master的相同 binlog-format='mixed' # log_slave_updates //允许级联复制,主从从结构使用
2.连接master
mysql> CHANGE MASTER TO MASTER_HOST='192.168.4.10', # 主库对应的ip -> MASTER_USER='repl', -> MASTER_PASSWORD='pwd123', -> MASTER_LOG_FILE='dbsvr1-bin.000001', //对应Master的日志文件 -> MASTER_LOG_POS=0; //对应Master的日志偏移位置
3.启动slave
mysql> start slave;
4.查看slave(IO和SQL线程的状态)
mysql> show slave status\G;
常用配置
master服务器
[mysqld]
binlog_do_db=name # 设置master对哪些库记录日志
binlog_ignore_db=name # 设置master对哪些库不记录日志
slave服务器
[mysqld]
log_slave_updates # 记录从库更新,允许链式复制(A—B—C)
relay_log=file_name # 指定中继日志文件名
replicate_do_db=db_name # 复制指定库,可设置多条
replicate_ignore_db=db_name # 不复制哪些库,与do-db 选一种即可