1. Linux安裝Mysql8.0.20並配置主從復制(一主一從,雙主雙從)
Linux安裝Mysql8.0.20並配置主從復制(一主一從,雙主雙從)
2. 前提准備
# 創建主從數據庫文件夾
mkdir -p /usr/local/mysql/master1/conf
mkdir -p /usr/local/mysql/master1/data
mkdir -p /usr/local/mysql/slave1/conf
mkdir -p /usr/local/mysql/slave1/data
# 初始化主數據庫配置文件
cd /usr/local/mysql/master1/conf
touch my.cnf
vi my.cnf
# 粘貼以下內容
[mysqld]
datadir = /usr/local/mysql/master1/data
character-set-server = utf8
lower-case-table-names = 1
# 主從復制-主機配置
# 主服務器唯一ID
server-id = 1
# 啟用二進制日志
log-bin=mysql-bin
# 設置logbin格式
binlog_format = STATEMENT
# 初始化從數據庫配置文件
cd /usr/local/mysql/slave1/conf
touch my.cnf
vi my.cnf
# 粘貼以下內容
[mysqld]
datadir = /usr/local/mysql/slave1/data
character-set-server = utf8
lower-case-table-names = 1
# 主從復制-從機配置
# 從服務器唯一ID
server-id = 2
# 啟用中繼日志
relay-log = mysql-relay
# 文件夾授權
chmod -R 777 /usr/local/mysql
3. Docker部署Mysql8.0.20
# 拉取鏡像
docker pull mysql:8.0.20
# 查看鏡像
docker images
# 構建主數據庫容器
docker run --name=mysql-master-1 --privileged=true -p 3306:3306 -v /usr/local/mysql/master1/data/:/var/lib/mysql -v /usr/local/mysql/master1/conf/my.cnf:/etc/mysql/my.cnf -v /usr/local/mysql/master1/mysql-files/:/var/lib/mysql-files/ -e MYSQL_ROOT_PASSWORD=3edc#EDC -d mysql:8.0.20 --lower_case_table_names=1
# 查詢是否啟動成功
docker ps
# 驗證是否可以登錄
# 交互式進入容器
docker exec -it mysql-master-1 /bin/bash
# 登錄(使用構建時指定的密碼:3edc#EDC)
mysql -uroot -p
# 退出
quit
exit
# 構建從數據庫容器
docker run --name=mysql-slave-1 --privileged=true -p 3307:3306 -v /usr/local/mysql/slave1/data/:/var/lib/mysql -v /usr/local/mysql/slave1/conf/my.cnf:/etc/mysql/my.cnf -v /usr/local/mysql/slave1/mysql-files/:/var/lib/mysql-files/ -e MYSQL_ROOT_PASSWORD=3edc#EDC -d mysql:8.0.20 --lower_case_table_names=1
# 查詢是否啟動成功
docker ps
# 驗證是否可以登錄
# 交互式進入容器
docker exec -it mysql-slave-1 /bin/bash
# 登錄(使用構建時指定的密碼:3edc#EDC)
mysql -uroot -p
# 退出
quit
exit
# 關閉防火牆
# 查看防火牆狀態
systemctl status firewalld
# 關閉防火牆
systemctl stop firewalld
4. 配置主從復制
# 進入主數據庫
mysql -uroot -p -h192.168.10.234 -P3306
- 主數據庫創建用戶slave並授權
# 創建用戶
create user 'slave'@'%' identified with mysql_native_password by 'password';
# 授權
grant replication slave on *.* to 'slave'@'%';
# 刷新權限
flush privileges;
# 查詢server_id值
show variables like 'server_id';
# 也可臨時(重啟后失效)指定server_id的值(主從數據庫的server_id不能相同)
set global server_id = 1;
# 查詢Master狀態,並記錄File和Position的值
show master status;
# 注意:執行完此步驟后退出主數據庫,防止再次操作導致File和Position的值發生變化
# 驗證slave用戶是否可用
mysql -uslave -p -h192.168.10.234 -P3306
# 進入從數據庫
mysql -uroot -p -h192.168.10.234 -P3307
# 查詢server_id值
show variables like 'server_id';
# 也可臨時(重啟后失效)指定server_id的值(主從數據庫的server_id不能相同)
set global server_id = 2;
# 若之前設置過同步,請先重置
stop slave;
reset slave;
# 設置主數據庫
change master to master_host='192.168.10.234',master_port=3306,master_user='slave',master_password='password',master_log_file='mysql-bin.000002',master_log_pos=156;
# 開始同步
start slave;
# 若出現錯誤,則停止同步,重置后再次啟動
stop slave;
reset slave;
start slave;
# 查詢Slave狀態
show slave status\G
# 查看是否配置成功
# 查看參數 Slave_IO_Running 和 Slave_SQL_Running 是否都為yes,則證明配置成功。若為no,則需要查看對應的 Last_IO_Error 或 Last_SQL_Error 的異常值。
5. 測試
通過工具連接主從數據庫或者在服務器連接。
# 在主數據庫創建數據庫test
create database test;
# 從數據庫查看
show databases;
# 在主數據庫創建表
use test;
create table t_user(id int, name varchar(20));
# 插入數據
insert into t_user values(1, 'C3Stones');
# 在從數據庫查看
use test;
select * from t_user;
# 其他刪改查操作請自行測試