MySQL 主从复制
了解MySQL主从复制:
MySQL的复制功能是构建大型,高性能应用程序的基础。主从复制是指一台服务器充当主数据库服务器(master),另一台或多台服务器充当从数据库服务器(slave),主服务器中的数据自动复制到从服务器之中。MySQL主从复制的基础是主服务器对数据库修改并记录二进制日志,从服务器通过主服务器的二进制日志自动执行更新。
复制解决的问题:
- 数据分布 (Data distribution)
- 负载均衡 (Load balancing)
- 高可用及容错 (High availability and failover)
- 备份(Backups)
MySQL复制的类型:
- SBR(statement based replicate):基于语句的复制,在主服务器上执行的SQL语句,在从服务器上执行同样的语句。
- RBR(row based replicate):基于行的复制,将主服务器上改变的内容复制过去。
- MIX(mixed):默认采用基于语句的复制,一旦发现基于语句的无法精确的复制时,就会采用基于行的复制。
MySQL主从复制原理:
- master将改变的内容记录到二进制日志中(binary log),这些记录叫做二进制日志事件(binary log events);
- slave通过 IO thread 接收master的binary log,并写入到slave的 realay log(中继日志)中,SQL thread 从realay log 读取事件,并更新slave数据。
MySQL主从配置:
master配置:
禁用GTID:gtid_mode=OFF
server_id:103306 (建议IP后两位加数据库端口号)
log_bin:log_bin=ON
binlog_format:binlog_format=ROW (可选:mixed|statement )
创建复制账号:
grant replication slave on *.* to 'repl'@'%' identified by 'password';
查看master状态:
show master status\G;
查看Binlog Dump:
show processlist\G;
Command: Binlog Dump
State: Master has sent all binlog to slave; waiting for more updates
slave配置:
禁用GTID:gtid_mode=OFF
server_id:113306 (建议IP后两位加数据库端口号)
log_bin:log_bin=ON
log_slave_updates:log_slave_updates=ON
连接主库:
CHANGE MASTER TO MASTER_HOST='192.168.100.10', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_PORT=3306, MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=3141;
开启同步:
start slave;
其他命令:
stop slave:关闭同步
start slave io_thread:开启IO线程,stop 关闭
start slave sql_thread:开始SQL线程,stop 关闭
查看slave状态:
show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
IO thead 和 SQL thead线程:
show processlist\G;
Command: Connect
State: Waiting for master to send event
Command: Connect
State: Slave has read all relay log; waiting for more updates