
mysql主从复制
mysql 8.23之后主从复制
master节点
修改配置文件
/etc/my.cnf
// mysql节点id,如果主节点已经启动,不方便重启,可以不修改master
server-id = 1
// binlog配置,一般已经开启,如果未开启,则增加下放配置即可
log_bin = /var/lib/mysql/mysql_bin
检查是否开启bin_log
SHOW VARIABLES LIKE 'log_bin';
显示值为 on,则已开启
重启mysql
创建备份账号
命令行
// {userName} 账号 {ip}指定允许ip,也可以设置%,则任意ip userPass 密码
create user '{userName}'@'{ip}' identified by 'userPass';
// {userName} 账号 {ip}指定允许ip,也可以设置%,则任意ip
grant replication slave on *.* to {userName}@{ip};
// 检查是否创建成功
select * from mysql.user where User='{userName}';
// 检查当前用户获得的授权
show grants for {userName}@{ip};
// 使新建账号生效
flush privileges;
客户端
在对应使用客户端进行操作
导出指定库
在mysql中锁定表并查看当前位置,后续从库会使用
// 锁表
FLUSH TABLES WITH READ LOCK;
// 查看bin_log 最新位置 , 需要使用 File Position 两个字段
SHOW BINARY LOG STATUS;
导出指定库(如果存在很多数据,如果是空数据库,则在从库创建对应数据库与表即可)
- 命令行
mysqldump -u root -p {database} > mybase_all.sql
- 使用对应客户端(使用数据同步工具)
可以使用 navicat 客户端,提供对应工具
解锁表 (使用命令行则需要进行此步)
UNLOCK TABLES;
slave从库
配置文件
/etc/my.cnf
// 节点id,从库 一定要改,默认值会与master冲突
server-id = 2
replicate-do-db = 要复制的库名
read_only = 1
导入主库导出的sql(如果使用数据同步工具,则跳过,或者导入工具直接导入从库)
mysql -u root -p {database} < my_base_all.sql
从库启动复制
设置复制
// masterIp 主节点ip
// userName 主节点创建用户
// userPass 密码
// masterPort 主节点端口
// log_file 在 导出指定库 查询出的 file 字段内容 , 如果相隔时间比较久,则建议在执行该命令时重新获得
// log_pos 在 导出指定库 查询出的 Position 字段内容 , 如果相隔时间比较久,则建议在执行该命令时重新获得
CHANGE REPLICATION SOURCE TO SOURCE_HOST='{masterIp}', SOURCE_USER='{userName}', SOURCE_PASSWORD='{userPass}',
SOURCE_PORT={masterPort}, SOURCE_LOG_FILE='{log_file}', SOURCE_LOG_POS={log_pos};
启动复制
START replica;
查看复制状态
// mysql 8.4版本前使用这条命令查看
show master status;
// MySQL 8.4版本后使用这条命令查看
SHOW replica STATUS;
// 注意是否有error_no ,存在则需要查看对应内容,进行解决
其他命令,根据需要使用
// 停止
STOP replica;
// 重置,需要在 stop命令之后执行
RESET replica;
其他错误
从节点登录主节点失败
reported error: Authentication requires secure connection.
一般发生在版本差别较大的情况,
解决方案
在从节点使用mysql cli 登录一次 主节点,加入 --get-server-public-key 参数即可
mysql -h xxx -u {userName} -p --get-server-public-key
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 程序员小航
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果