Centos8搭建MySQL8.0.21主从

准备工作

  • 两台或两台以上Centos8并安装MySQL8.0.21的服务器(参考
  • 主库创建好数据库以及表,然后插入一些用来测试同步的数据
  • 服务器都可以访问互联网

环境

下面介绍一下本文搭建主从的环境:

主库:192.168.0.22  主机名:dxm22.host   server-id=1
从库:192.168.0.24  主机名:dxm24.host     server-id=2
库名:shop 
表名:user

配置主库

修改配置文件my.cnf

# 下面是两项关键配置项,如果已经有,则检查是否正确;如果没有则增加如下内容:
log-bin=/data/mysql/mysql-8.0.21-linux-glibc2.12-x86_64/binlog # binlog日志文件名,二进制日志用来供主从复制时使用
server-id=1  # 设置主服务器的ID,可以任意配置,但是多个主从之间不能重复。

另外,因为mysql8中,binlog_format 变量的默认值是row,所以我们不再需要手动声明这个变量的配置。

创建同步账号

这个账号是供从库访问主库的,所以’synch’@'192.168.0.24’这里的ip是从库的ip

# 创建同步账号synch
create user 'synch'@'192.168.0.24' identified by '123456';

# 授权
grant replication slave on *.* to 'synch'@'192.168.0.24';

# 查看是否创建用户成功
select * from mysql.user where User='synch'\G;

# 检查权限
show grants for 'synch'@'192.168.0.24';

# 刷新MySQL的系统权限相关表­
flush privileges;

获取主库当前binary log文件名和位置(position)

SHOW MASTER STATUS;

在这里插入图片描述

主库加锁

加锁,避免导数据时有写操作。

FLUSH TABLES WITH READ LOCK;

导出需要同步的数据并上传至从库服务器

# 导出需要同步的数据
/usr/local/mysql/bin/mysqldump --port=3306 -uroot -p --databases shop --lock-tables=false --> /root/shop.sql

# 切换到/root目录并上传shop.sql至从库服务器
scp shop.sql root@192.168.0.24:/root

主库解锁

UNLOCK TABLES;

查看防火墙配置

主要是检查从库的IP是否加入到防火墙,否则无法连接。

firewall-cmd --list-all #查看现有的规则
# 如果上面命令的列表里面没有从库的IP,需要将从库的IP加入防火墙
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.0.24" accept'

# 防火墙规则配置生效
firewall-cmd --reload

配置从库

导入数据

执行前面从主库scp过来的SQL文件导入库、表结构以及数据。

# 如果当前存在同步数据库,先删除数据
drop database shop;

# 导入数据
[root@dxm24 ~]# /usr/local/mysql/bin/mysql --host=127.0.0.1 --port=3306 -uroot -p < /root/shop.sql
Enter password:

修改配置文件

# 修改my.cnf配置文件
vim /etc/my.cnf

# 主要配置以下关键项
server-id=2 # 指定从库的server-id
replicate-do-db=shop  # 用来指定要复制的数据库
read_only=1   # 库设置为只读,普通用户(非root)访问时只有只读的权限,不能做写操作

**注意:**修改完配置文件之后记得重启MySQL服务,否则会报错:ERROR 3021 (HY000): This operation cannot be performed with a running slave io thread; run STOP SLAVE IO_THREAD FOR CHANNEL ‘’ first.。

停止同步从库

stop slave;

配置连接到主库的信息

change 
master to 
master_host='192.168.0.22',
master_port=3306,
master_user='synch',
master_password='123456',
master_log_file='binlog.000017',
master_log_pos=8014;

# master_host是主库的IP地址
# master_user、master_password是前面在主库创建的用于同步数据的账号和密码
# master_log_file、master_log_pos对应的是在主库执行的show master status 的结果里面的file和position。

开启从库同步

start slave;

查看从库同步状态

show slave status\G;

在这里插入图片描述
在这里插入图片描述
从库同步状态关键项的解释:

keyvalue含义
Slave_IO_StateWaiting for master to send eventrelay日志中的sql语句已经全部执行完毕
Master_Host192.168.0.22主库IP
Master_Usersynch同步的用户
Master_Port3306端口
Master_Log_Filebinlog.000017I/O线程当前正在读取的主服务器二进制日志文件的名称
Read_Master_Log_Pos8313在当前的主服务器二进制日志中,I/O线程正在读取的位置
Relay_Log_Filedxm24-relay-bin.000002
Relay_Log_Pos620
Relay_Master_Log_Filebinlog.000017由SQL线程执行的同步的主服务器二进制日志文件的名称,如果和Master_Log_File两个文件名相同,则表示读**取和执行的是同一个二进制文件**
Slave_IO_RunningYes负责读取主库的binlog日志,并写到从库的relay日志中
Slave_SQL_RunningYes负责在从库上执行relay日志中的SQL。如果和Slave_IO_Running两个线程的状态都是yes,表示同步正常,否则要看带有Error的信息进行排查
Replicate_Do_DBshop同步的数据库的名字
Exec_Master_Log_Pos8313来自主服务器的二进制日志的由SQL线程执行的上一个时间的位置,如果和Read_Master_Log_Pos两个位置的数字相同则**表示读取和执行的进度完全同步**
Master_Server_Id1主库的server-id
Master_Info_Filemysql.slave_master_info
Slave_SQL_Running_StateSlave has read all relay log; waiting for more updates
Master_Retry_Count86400

查看从库的server-id

show variables like 'server_id';

在这里插入图片描述

遇到的问题

1、error connecting to master ‘synch@192.168.0.22:3306’ - retry-time: 60 retries: 4 message: Authentication plugin ‘caching_sha2_password’ reported error: Authentication requires secure connection。
原因:mysql 8.0 默认使用 caching_sha2_password 身份验证机制 —— 从原来的 mysql_native_password 更改为 caching_sha2_password。客户端不支持新的加密方式。所以需要修改用户的密码和加密方式,我们这里在主库登录MySQL输入以下命令:

root@db 13:37:  [mysql]> ALTER USER 'synch'@'192.168.0.24' IDENTIFIED WITH mysql_native_password BY '123456';

即可解决。我们去从库验证一下,在从库执行一下命令:

show slave status\G

在这里插入图片描述
可以看到Slave_IO_Running 和Slave_SQL_Running两个线程的状态都是yes,表示同步正常。

验证结果

  1. 先在主库插入一条数据,执行以下语句:
INSERT INTO `shop`.`user` (`id`,`name`,`age`,`address`,`sex`,`remark`,`create_time`,`create_by`,`create_name`,`update_time`,`update_by`,`update_name`,`is_del`) 
VALUES (4,'赵六',66,'深圳',0,NULL,'2020-12-08 14:13:08.000000','1','admin','2020-12-08 14:13:16.000000',NULL,NULL,0);

在这里插入图片描述
在这里插入图片描述

  1. 再去从库验证是否有这条数据。
    在这里插入图片描述
    至此完成了两台centos服务器相同MySQL版本的一主一从数据库的同步环境搭建!!!!!!
  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值