https://dev.mysql.com/doc/refman/8.0/en/replication.html 官方地址,我这里使用的是 Mysql8.0.2
主从复制的优点:
- 横向扩展解决方案,在多个副本之间分散负载以提高性能。在此环境中,所有写入和更新都必须在主服务器上进行。然而,读取可能发生在一个或多个副本上。该模型可以提高写入性能(因为主专用于更新),同时显着提高越来越多的副本的读取速度。
- 数据安全,因为副本可以暂停复制过程,所以可以在副本上运行备份服务而不会破坏相应的主数据。
- 分析,可以在主上创建实时数据,而信息分析可以在副本上进行,而不会影响源的性能。
- 远程数据分发,可以使用复制创建本地数据副本供远程站点使用,而无需永久访问主服务。
Mysql 8.0 支持多种复制计数,可以从二进制日志复制,也可以GTID(全局事务)标识复制,也可以多主复制等,更多方法可以从官网中查看,这里我们根据 GTID 复制。GTID依赖于事务,也就是说其他引擎是没办法复制的
在主服务器配置 my.cnf 中配置如下
# server_id 必须在复制中唯一
server_id=1
# 主从复制所需
gtid_mode=ON
enforce-gtid-consistency=ON
在从服务器配置的my.cng中配置如下
server_id=2
# 主从复制所需
gtid_mode=ON
enforce-gtid-consistency=ON
# 启动每个副本 ,以确保在配置副本设置之前不会启动复制
skip-slave-start=on
# 指定复制的数据库
replicate-do-db=test
# 过滤复制的数据库
replicate-ignore-db=iedp:wiedp_sub:wiedp
启动主服务器,添加一个让子服务器连接的账号和密码
# 创建用户
CREATE USER repl@'10.240.30.%' IDENTIFIED BY 'repl@password';
# 授权
GRANT REPLICATION SLAVE ON *.* TO repl@'10.240.30.%';
启动从服务器,并输入如下语句
CHANGE MASTER TO
MASTER_HOST = '10.240.30.101',
MASTER_PORT = 3306,
MASTER_USER = 'repl',
MASTER_PASSWORD = 'Repl@123',
MASTER_AUTO_POSITION = 1;
注意要复制的库在从库不能存在,否则会报错,在从库执行如下命令
mysql> START SLAVE;
主从复制结束。
注意事项:
从库可以删除同步的数据和表以及被同步的库;
从库删除的数据、表、库,在主库添加数据时从库无法恢复;
从库在首次复制不能拥有要复制的库,否则报错;
从库主动删除的数据无法恢复,只能拥有未被复制过的数据;
如果想动态设置需要复制的库,可以通过如下命令
# 需要先停止之前复制线程
STOP SLAVE SQL_THREAD;
# 重新设置要复制哪些库,replicate_ignore_db(不复制的库)
CHANGE REPLICATION filter replicate_do_db=(test_1,test);
# 重新启动复制线程
start slave sql_thread;
网友评论