安装环境:ubuntu20.04+mysql8.0.22+异步复制(mysql8.0数据库安装)
服务器:
- 主机: 192.168.247.129
- 从机: 192.168.247.130
一. 主机
1.1 修改配置文件
[mysqld]
# 主从配置-主机(所有配置必须写在[mysqld]下)
server-id = 0001 # 服务器id,唯一
log_bin = /var/log/mysql/mysql-bin.log # 二进制日志,实现主从的关键
binlog_format = mixed # 日志格式
binlog_expire_logs_seconds = 604800 # 日志过期的时间秒数
max_binlog_size = 200M # 最大二进制日志文件
binlog_do_db = test # 同步的数据库
1.2 授权允许从机读取主机文件
# 创建一个新账号或使用已有账号(这里使用已有账号),这个账号指的是主机上的账号
mysql> grant replication slave on *.* to '用户名'@'%';
mysql> flush privileges;
1.3 重启服务器
systemctl restart mysql
1.4 获取主机状态,记录File和Position,用于从机同步主机
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 544 | test | | |
+------------------+----------+--------------+------------------+-------------------+
二. 从机
2.1 修改配置文件
[mysqld]
# 主从配置-从机(所有配置必须写在[mysqld]下)
server-id = 0002 # 服务器id,唯一
skip_slave_start
read_only
2.2 重启服务器
systemctl restart mysql
2.3 连接主机
change master to master_host='192.168.247.129', # 主机ip
master_port=3306,
master_user='用户名', # 1.2 中授权的用户
master_password='密码',
master_log_file='mysql-bin.000001', # 1.4 中的File
master_log_pos=544; # 1.4 中的Position
2.4 启动slave数据同步
# 启动slave数据同步
mysql> start slave;
# 停止slave数据同步(若有需要)
mysql> stop slave;
# 删除master的binlog,即手动删除所有的binlog日志
mysql> reset master;
# 删除slave的中继日志,用于处理-调试-阶段主从库出现不一致导致从库不能复制的错误
# 生产环境不建议使用该命令,除非binlog的数据真的不需要
mysql> reset slave;
2.5 查看slave信息
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.247.129
Master_User: guocp
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 544
Relay_Log_File: guocpserver-relay-bin.000002
Relay_Log_Pos: 324
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
...
Slave_IO_Running和Slave_SQL_Running都为yes,则表示同步成功。
三. 在异步复制基础上修改为半同步复制
3.1 先确认MySQL服务器是否支持动态增加插件
# 输出结构为YES即为可以
mysql> select @@have_dynamic_loading
3.2 主机安装插件
# 安装插件
mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';
# 验证安装,输出行中有semisync_master.so即为成功
mysql> select * from mysql.plugin;
3.3 主机启用插件
# 临时设置
mysql> set global rpl_semi_sync_master_enabled=1;
mysql> set global rpl_semi_sync_master_timeout=30000;
# 可写入到mysqld配置下
3.4 从机安装插件
# 安装插件
mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
# 验证安装,输出行中有semisync_slave.so即为成功
mysql> select * from mysql.plugin;
3.5 从机启用插件
mysql> set global rpl_semi_sync_slave_enabled=1;
mysql> stop slave io_thread;start slave io_thread;
3.6 查看主从复制信息
# 查看主从复制信息
mysql> show status like '%semi_sync%';
# 查看半同步复制状态
mysql> show variables like "rpl_semi_sync_%_enabled";
PS
- 主机mysql命令行执行
show slave hosts;,可以查看当前连接的从机 - 如果主机原来已有数据,从机是不会同步的,需要自行同步数据主从复制-同步已有数据

1297

被折叠的 条评论
为什么被折叠?



