目錄
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` 身份驗證插件。