linux搭建mysql主从复制(一主一从)

avatar
作者
猴君
阅读量:0

目录

 

0、环境部署

1、主服务器配置

1.1  修改mysql配置文件

1.2  重启mysql

1.3  为从服务器授权

1.4  查看二进制日志坐标

2、从服务器配置

2.1  修改mysql配置文件

2.2  重启mysql

2.3  配置主从同步

2.4  开启主从复制

3、验证主从复制

3.1  主服务器上创建test_db

3.2  从服务器上查看test_db

4、报错解决

Slave_IO_Running: No

Slave_IO_Running: Connecting

补充


 

0、环境部署

设备操作系统 IP地址mysql版本
master主服务器openEuler release 22.03 (LTS-SP2)192.168.48.1318.0.37 for Linux on x86_64 (Source distribution)
slave从服务器openEuler release 22.03 (LTS-SP2)192.168.48.1328.0.37 for Linux on x86_64 (Source distribution)

注:openEuler release 22.03 (LTS-SP2)的内核为 Linux 5.10.0-153.12.0.92.oe2203sp2.x86_64

2339be0616d44dbe93a1849098432337.png

 

#下载mysql yum install -y mysql-server #防火墙放行mysql3306端口(防火墙没开忽略此操作) firewall-cmd --zone=public --add-port=3306/tcp --permanent firewall-cmd --reload firewall-cmd --zone=public --list-ports | grep 3306 #关闭selinux sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config reboot #启动mysql systemctl start mysqld #检查mysql是否成功启动 ps -ef | grep mysql #设置mysql开机自启 systemctl enable mysqld #登录mysql mysql -uroot -p

该版本mysql首次登录密码为空,直接回车即可

1、主服务器配置

1.1  修改mysql配置文件

vim /etc/my.sql

server-id=1#必选项
read-only=0
binlog_format=MIXED
log-slave-updates=true
log-bin=mysql-bin#不添加此项默认为binlog.0000x格式

592676ba93804d408bd87004ec660dbd.png

1.2  重启mysql

systemctl restart mysqld

1.3  为从服务器授权

mysql -uroot -p #创建elysia用户,允许登录远程主机IP为192.168.48.132,密码为elysia@123 CREATE USER 'elysia'@'192.168.48.132' IDENTIFIED WITH mysql_native_password BY 'elysia@123'; #为elysia用户授予所有权限,包括了replication slave权限 GRANT ALL PRIVILEGES ON *.* TO 'elysia'@'192.168.48.132'; #刷新权限 flush privileges;

1.4  查看二进制日志坐标

show master status\G;

b5c9c5b5797646d8bfd9c1f35afd080e.png

当前使用的二进制文件的名字为:mysql-bin.000001 

当前偏移量为:2405

 

2、从服务器配置

2.1  修改mysql配置文件

echo server-id=2 >> /etc/my.cnf

从服务器server-id不能与主服务器一样

1148f772c68d4d3dad9f0c481c288cf1.png

2.2  重启mysql

systemctl restart mysqld

2.3  配置主从同步

mysql -u root -p change master to master_host='192.168.48.131',#主服务器IP master_user='elysia',#用于复制的用户,必须有replication slave权限 master_password='elysia@123',#用于复制用户的密码 master_log_file='mysql-bin.000001',#当前使用的二进制日志文件binlog master_log_pos=2405;#binlog的位置  

2.4  开启主从复制

start slave; #查看当前主从复制状态 show slave status\G;

出现双yes即可

2724be52e94243e7943a4e48e0959883.png

3、验证主从复制

3.1  主服务器上创建test_db

#创建一个test_db数据库 create database test_db; #创建一个dept表 use test_db; create table dept (dept1 int ,dept_name varchar(11)) charset=utf8; #插入数据 insert into dept values (101,'财务'), (102,'销售'), (103,'IT技术'), (104,'行政');

3.2  从服务器上查看test_db

#查看当前数据库;  show databases; #查看表的内容; select * from test_db.dept;

cd356a3f6f804dd0b06f9c881f71fec4.png

从服务器上出现test_db,并且成功查询,主从复制搭建成功

4、报错解决

Slave_IO_Running: No

be2bbf7f82b5451c89d24d0ecbf0122a.png

查看 Last_IO_Error 

d811d937a2ed450494bf832848069e12.png

报错原因:

二进制文件位置坐标错误

解决:将master_log_pos改为正确位置即可

其他可能错误:

  • 从服务器mysql远程连接主服务器失败;
  • 两台虚拟机uuid或者mac地址重复(可能你的两台虚拟机由同一台克隆而来);

 

Slave_IO_Running: Connecting

970f979ca52e46128c9f761f07cb1d0b.png

查看 Last_IO_Error 

5d9b9aa50c294b7f9a6d47f8b9ee0eae.png

 报错原因:这个错误表明连接到MySQL数据库时,使用了caching_sha2_password身份验证插件,但是要求进行安全连接。也就是,你在主服务器mysql上使用了以下格式的命令创建了从服务器的登录用户

CREATE USER 'elysia'@'192.168.48.132' IDENTIFIED BY 'elysia@123';

解决方法:

ALTER USER 'elysia'@'192.168.48.132' IDENTIFIED WITH mysql_native_password BY 'elysia@123';

补充

CREATE USER 'elysia'@'192.168.48.132' IDENTIFIED BY 'elysia@123';

CREATE USER 'elysia'@'192.168.48.132' IDENTIFIED WITH mysql_native_password BY 'elysia@123';

的区别:

这两个 SQL 语句的区别在于用户的身份验证机制。

  • 1. `CREATE USER 'elysia'@'192.168.48.132' IDENTIFIED BY 'elysia@123';`: 这条语句创建了一个名为 'elysia' 的用户,该用户可以从 IP 地址为 '192.168.48.132' 的主机连接到 MySQL 数据库。通过 `IDENTIFIED BY 'elysia@123'` 指定了用户的密码。这种方式使用的身份验证插件是默认的 `caching_sha2_password`,这是 MySQL 8.0 版本及以上的默认身份验证插件。
  • 2. `CREATE USER 'elysia'@'192.168.48.132' IDENTIFIED WITH mysql_native_password BY 'elysia@123';`:这条语句也创建了一个名为 'elysia' 的用户,同样可以从 IP 地址为 '192.168.48.132' 的主机连接到 MySQL 数据库。不同之处在于,通过 `IDENTIFIED WITH mysql_native_password` 指定了用户要使用的身份验证插件,即 `mysql_native_password`。这是旧版本 MySQL 使用的默认身份验证插件,它在 MySQL 8.0 版本中被 `caching_sha2_password` 替代。

因此,这两个语句的主要区别在于用户的身份验证机制。如果你的 MySQL 数据库版本是 MySQL 8.0 及以上,推荐使用第一个语句,因为它使用了更安全的默认身份验证插件。如果你需要与旧版本的 MySQL 数据库兼容,可以使用第二个语句指定使用 `mysql_native_password` 身份验证插件。

 

 

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!