在前面的章节中我们介绍了MySQL主从复制的一些基础知识,这里我们给出相应的示例。这里我们有两台虚拟机192.168.79.129
与192.168.79.128
,其中:
1. Replication Master配置
1) 关闭mysql服务
# systemctl list-units | grep mysql
mysqld.service loaded active running MySQL Server
# systemctl stop mysqld
# systemctl status mysqld
2) 修改配置文件
修改mysql配置文件/etc/my.cnf
:
注: 在master上我们还可以在配置文件/etc/my.cnf
的[mysqld]
段中明确指定需要记录哪些数据库操作的日志,以及忽略哪些数据库操作的日志
[mysqld]
binlog_do_db = test1 #数据库白名单列表,二进制日志记录的数据库,即需要同步的库
binlog_do_db = test2
binlog_do_db = test3
binlog_ignore_db = igdb1 #数据库黑名单列表, 二进制日志中忽略的数据库
binlog_ignore_db = igdb2
3) 重启master服务
2. Replication Slave配置
1) 关闭mysql服务
2) 修改配置文件
修改mysql配置文件:
注: 从服务器SQL Thread在Replay中继日志中的事件时仅读取于特定数据库相关的事件,并应用于本地. (但是浪费I/O ,浪费带宽) 推荐使用从节点复制过滤相关设置项。我们可以在配置文件/etc/my.cnf
的[mysqld]
段中明确指定只复制哪些数据库,同时忽略哪些数据库:
replicate_do_db = test1 #复制库的白名单. 设定需要复制的数据库(多数据库使用逗号隔开或重复设置多行)
replicate_ingore_db = test2 #复制库的黑名单. 设定需要忽略的复制数据库 (多数据库使用逗号隔开或重复设置多行)
replicate_do_table = test1.uw #复制表的白名单. 设定需要复制的表(多数据库使用逗号隔开或重复设置多行)
relicate_ingore_table=test.user #复制表的黑名单. 设定需要忽略的复制的表(多数据库使用逗号隔开或重复设置多行)
replicate_wild_do_table = test.% #同replication-do-table功能一样,但是可以通配符. 更高级别的应用,通配符,应用到哪一类表的。
replicate_wild_ignore_table=mysql.% #同replication-ignore-table功能一样,但是可以加通配符.
当某一个数据库在master中存在,而在slave中不存在时,会出现sql错误,这时候可以排除或者从库手动导入主库数据库。
3) 重启mysql
3. 创建replication用户
在master上执行如下语句创建replication用户:
4. 获得master binlog复制点
在master上执行如下操作:
1) 通过命令行客户端启动一个新的session连接上master,然后通过执行FLUSH TABLES WITH READ LOCK将所有的表(tables)及阻塞的写操作都flush到日志文件中
注意:在执行完上面的语句之后,并不要退出对应的客户端连接,这样read lock将会一直维持, 否则对应的lock就会释放。
2) 在master另外一个session(即另一个客户端连接)上,使用SHOW MASTER STATUS语句来获得当前binlog文件的名称及位置(position)
注意此时仍暂时保持mysql处于READ LOCK
状态。
5. master上创建数据快照
执行如下命令导出要同步的数据库:
6. 导入数据到slave
将master上创建的数据快照拷贝到slave上,执行如下命令将快照数据导入到slave中:
执行后查看是否导入成功:
注:此时可以解除master上面的READ LOCK
,执行如下命令解除
7. slave启动主从同步
如下命令在slave上执行。
1) 执行同步前,要先关闭slave
2) 指定所要同步的master
注意上面这些信息在前面都已经获取到了,一定要保持前后一致。
3) 启动slave同步
4) 查看当前同步状态
8. 测试验证
我们在master
的test.student
表中插入一条数据:
在slave
上查看插入的数据是否同步过来:
这里可以看到数据库同步成功。
[参看]:
-
MySQL教程
-
MySQL的binlog日志
-
mysql (master/slave)复制原理及配置
-
MySQL主从复制(Master-Slave)实践
-
MySQL 设置基于GTID的复制
-
MySQL 在线开启/关闭GTID
-
mysql在线开启或禁用GTID模式
-
mysql (master/slave)复制原理及配置
-
Mysql主从同步