目录
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.131 | 8.0.37 for Linux on x86_64 (Source distribution) |
slave从服务器 | openEuler release 22.03 (LTS-SP2) | 192.168.48.132 | 8.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
#下载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格式
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;
当前使用的二进制文件的名字为:mysql-bin.000001
当前偏移量为:2405
2、从服务器配置
2.1 修改mysql配置文件
echo server-id=2 >> /etc/my.cnf
从服务器server-id不能与主服务器一样
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即可
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;
从服务器上出现test_db,并且成功查询,主从复制搭建成功
4、报错解决
Slave_IO_Running: No
查看 Last_IO_Error
报错原因:
二进制文件位置坐标错误
解决:将master_log_pos改为正确位置即可
其他可能错误:
- 从服务器mysql远程连接主服务器失败;
- 两台虚拟机uuid或者mac地址重复(可能你的两台虚拟机由同一台克隆而来);
Slave_IO_Running: Connecting
查看 Last_IO_Error
报错原因:这个错误表明连接到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` 身份验证插件。