本节介绍了基于二进制日志文件位置方法的MySQL服务器之间的复制。
一、复制原理:
mysql复制原理大致如下:
- 主库启用二进制日志(log-bin),将数据库的所有更新和更改操作记录作为“事件”写入二进制日志binlog
- 从库开启一个线程(I/O Thread),请求读取主库的二进制日志binlog中的事件
- 主库启动一个线程(Dump Thread),读取数据库事件并数据发给I/O线程
- 从库接收到主库发送过来的数据把它放置到中继日志(relay log)文件中,并记录该次请求在二进制文件binlog的具体位置
- 从库启动另一个线程(SQL Thread ),把relay log中的事件读取出来,并在本地再执行一次,从而使主从库的数据保持相同。
二、配置环境:
服务器 | 系统环境 |
---|---|
主库服务器 | IP:192.168.1.143 操作系统:window server 2012 R2 MySQL版本:5.7 |
从库服务器 | IP:192.168.1.144 操作系统:window 10 MySQL版本:5.7 |
三、配置过程
主库服务器配置(Master):
- 进入MySql安装目录,配置my.ini
server-id=1
log-bin=mysql-bin # 启用二进制日志 log-bin,从库会基于此log-bin来做复制
binlog-do-db=test # 用于同步的数据库,可设置多个(如果不指定数据库,则无需设置此项)
binlog_ignore_db=mysql # 不用于同步的数据库,可设置多个
- 重启mysq服务
- 进入mysql,创建复制用户,对用户进行授权使其用于复制主库数据
# 创建复制用户
CREATE USER repl IDENTIFIED BY '123456';
# 授权复制权限给repl用户
GRANT replication SLAVE,replication CLIENT ON *.* TO 'repl'@'%';
# 授权后记得刷新权限
flush privileges;
- 查看主库状态
mysql> show master status\G;
*************************** 1. row ***************************
File: mysql-bin.000004
Position: 847
Binlog_Do_DB: test
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
注意:
File和Position值会在从服务器的配置中用到
从库服务器配置(Slave):
- 进入MySql安装目录,配置my.ini
server-id=2 # 如果你不设置server_id(或显式地设置它的默认值0),从库会拒绝连接到主库,且值不能与主库的server_id相同
- 重启mysql服务
- 进入mysql服务,在从库上设置主库配置
change master to master_host='192.168.1.143',master_port=3306,master_user='repl',master_password='123456',
master_log_file='mysql-bin.000004',master_log_pos=847; ## 主库日志文件和日志文件位置必须与主服务器当前状态保持一致!
- 启动从库复制线程
start slave;
- 查看从库状态
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.143
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000004 # 主库日志文件名
Read_Master_Log_Pos: 847 # 主库日志文件坐标
Relay_Log_File: Yct201901081428-relay-bin.000004
Relay_Log_Pos: 1060
Relay_Master_Log_File: mysql-bin.000004
Slave_IO_Running: Yes # 从库IO线程运行状态
Slave_SQL_Running: Yes # 从库SQL线程运行状态
Replicate_Do_DB:
Replicate_Ignore_DB:
.
.
.
省略
注意:
如果Slave_IO_Running 和 Slave_SQL_Running 两个线程状态都为YES,说明主从设置成功
至此,MySQL主从配置就全部完成了。