MySQL 主从复制具有读写分离,提升访问性能,备份数据以及故障转移等优点。下面介绍一种最简单的配置方式:两个全新的数据实例,一个作为主库,另一个作为从库。
此处使用的版本为: MySQL 5.7
局域网内两台主机(或虚拟机)并运行 docker 服务(方便测试)
0x01 启动数据库实例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| # 主库 192.168.31.12 docker run --name=mysql_main \ --mount type=bind,src=/home/liber/mysql/etc/my.cnf,dst=/etc/my.cnf \ --mount type=bind,src=/home/liber/mysql/lib,dst=/var/lib/mysql \ --env MYSQL_ROOT_HOST=% \ --env MYSQL_ROOT_PASSWORD=123456 \ --env MYSQL_DATABASE=monday \ -p 3306:3306 \ -p 33060:33060 \ -d mysql/mysql-server:5.7
# 从库 192.168.31.13 docker run --name=mysql_replica \ --mount type=bind,src=/home/liber/mysql/etc/my.cnf,dst=/etc/my.cnf \ --mount type=bind,src=/home/liber/mysql/lib,dst=/var/lib/mysql \ --env MYSQL_ROOT_HOST=% \ --env MYSQL_ROOT_PASSWORD=123456 \ --env MYSQL_DATABASE=monday \ -p 3306:3306 \ -p 33060:33060 \ -d mysql/mysql-server:5.7
|
0x02 创建复制账号
1 2
| # 主库上运行 GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO repl@'%' IDENTIFIED BY 'passw0rd';
|
0x03 配置主库和备库
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| # 主库 my.cnf
[mysqld] user=mysql #log-error=data-dir/host_name.err # # replication # 推荐指定全路径 log_bin=/var/lib/mysql/mysql-bin # 服务器 ID 主从唯一 server_id=12
# 备库 my.cnf
[mysqld] user=mysql # # replacation log_bin =/var/lib/mysql/mysql-bin server_id =13 # 备库中继日志位置,推荐指定全路径 relay_log =/var/lib/mysql/mysql-relay-log # 更新记录到日志中 log_slave_updates=1 # 防止普通用户改动数据 read_only =1
|
0x04 同步数据
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| # 1. 备库指定主库信息 change master to master_host='192.168.31.12', master_user='repl', master_password='passw0rd', master_log_file='mysql-bin.000001', master_log_pos=0;
# 查看备库状态 show slave status\G # 显示如下 Slave_IO_State: Master_Host: 192.168.31.12 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 4 Relay_Log_File: mysql-relay-log.000001 Relay_Log_Pos: 4 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: No Slave_SQL_Running: No ..... Seconds_Behind_Master: NULL
# 2. 备库开始同步 start slave;
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| # 可以在主备库上运行 show processlist\G 查看主从同步相关进程信息,参考如下:
# 主库 *************************** 3. row *************************** Id: 21 User: system user Host: db: NULL Command: Connect Time: 188 State: Waiting for master to send event Info: NULL # 备库 *************************** 4. row *************************** Id: 22 User: system user Host: db: NULL Command: Connect Time: 188 State: Slave has read all relay log; waiting for more updates Info: NULL
|
0x05 测试
测试在数据库monday
中操作表和数据是否能同步到备库。
参考: