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

目录

 

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` 身份验证插件。

 

 

  • 15
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值