Centos7+Mysql8雙機熱備(主-主復制HA) 操作說明
龐國明,2018-09-13
1.1 操作前的准備
- 兩台服務器,並同時按照Centos7.3新裝版本(必須裝相同版本);
- 如果有外網鏈接則配置Centos7聯網、安裝wget工具,如果沒有外網鏈接則跳到 “1.2 centos7下安裝mysql”;
配置Centos7 聯網
新裝Centos7默認聯網是關閉的,可以通過以下步驟設置開機聯網
第一步:[root@localhost ~]# cd /etc/sysconfig/network-scripts/
第二步:[root@localhost ~]# ls
這時候你會發現沒有教程上說的ifcfg-eth0文件,打開第一個即可。
有的教程找不到就新建一個,肯定是錯的。
第三步:[root@localhost ~]# vi ifcfg-eno167777736
第四步:修改ONBOOT為yes 保存退出(參考vi使用方法)
第五步:[root@localhost ~]# service network restart
Centos7 下安裝wget
本次操作采用Centos 的yum源安裝,需要先下載rpm包,因此我們需要先安裝wget下載工具
[root@localhost ~]# yum install wget
安裝期間會提示確認提示,輸入y 確認安裝即可。
1.2 Centos7 下安裝MySQL 8
注意:兩台服務器上必須安裝相同版本的mysql
第一步:查看是否有舊版本,如果有就刪除
檢查舊版本,命令
rpm -qa|grep mariadb
rpm -qa|grep mysql
列出所有被安裝的rpm package ,命令
rpm -qa | grep mariadb
卸載,命令
rpm -e mariadb-libs-5.5.52-1.el7.x86_64
如果出現錯誤:依賴檢測失敗:
libmysqlclient.so.18()(64bit) 被 (已安裝) postfix-2:2.10.1-6.el7.x86_64 需要
libmysqlclient.so.18(libmysqlclient_18)(64bit) 被 (已安裝) postfix-2:2.10.1-6.el7.x86_64 需要
解決辦法為強制卸載,因為沒有--nodeps
rpm -e --nodeps mariadb-libs-5.5.52-1.el7.x86_64
第二步:下載並安裝MySQL
有外網鏈接情況下安裝MySQL8:
下載並安裝MySQL官方的 Yum Repository
[root@localhost ~]# wget -i -c https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm
使用上面的命令就直接下載了安裝用的Yum Repository,然后就可以直接yum安裝了。
[root@localhost ~]# yum -y install mysql80-community-release-el7-1.noarch.rpm
之后就開始安裝MySQL服務器。
[root@localhost ~]# yum -y install mysql-community-server
直到提示 install complete mysql安裝完畢
無外網連接情況下通過安裝包安裝MySQL8
創建目錄啟動之前,不然會報錯,啟動失敗
mkdir -p /usr/local/mysql/var
解壓安裝包
tar -xvf mysql-8.0.12-1.el7.x86_64.rpm-bundle.tar
rpm -ivh net-tools-2.0-0.22.20131004git.el7.x86_64.rpm
安裝msyql
rpm -ivh mysql-community-common-8.0.12-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-8.0.12-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-8.0.12-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-8.0.12-1.el7.x86_64.rpm
卸載順序
rpm -e mysql-community-server-8.0.12-1.el7.x86_64
rpm -e mysql-community-client-8.0.12-1.el7.x86_64
rpm -e mysql-community-libs-8.0.12-1.el7.x86_64
rpm -e mysql-community-common-8.0.12-1.el7.x86_64
復制my.cnf文件至/etc/
rm -rf /etc/my.cnf
cp my.cnf /etc/
初始化系統
mysqld --initialize-insecure --user=mysql
第三步:啟動MySQL
[root@localhost ~]# systemctl start mysqld.service
查看MySQL運行狀態,運行狀態如圖:
[root@localhost ~]# systemctl status mysqld.service
第四步:Mysql初始化配置
獲取初始密碼登錄mysql
mysql在安裝后會創建一個root@locahost賬戶,並且把初始的密碼放到了/var/log/mysqld.log文件中;
[root@localhost ~]# cat /var/log/mysqld.log | grep password
使用初始密碼登錄mysql
mysql -u root -p
修改初始密碼:
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';
如果想要設置簡單密碼(如abc、123),根據mysql8默認密碼策略是不允許的,可以修改默認密碼策略,來達到此目的
set global validate_password.policy=0;
set global validate_password.length=4;
1.3 防火牆、iptable設置
因為 mysql 雙機熱備需要相互遠程訪問mysql服務器,因此需要兩台服務器都開放3306端口,或者直接關閉防火牆。
關閉防火牆:systemctl stop firwalld
禁止防火牆開機啟動:systemctl disable firealld
防火牆開放3306端口:firewall-cmd --zone=public --add-port=3306/tcp --permanent
防火牆重新載入設置:firewall-cmd --reload
1.4 雙機熱備份(主-主復制HA集群)配置
首先保證兩台服務器mysql版本一致,同時防火牆都對3306開放
當前環境:
A服務器 ip:172.20.201.23 准備作為主服務器master
B服務器 ip: 172.20.201.24 用於備份的服務器slave
1.4.1 搭建 A—>B 的主從復制
1.4.1.1 操作步驟
在A服務器上操作
第一步:創建專門用於備份的 用戶(登錄mysql之后執行)
CREATE USER 'cp_user'@'172.20.201.24' IDENTIFIED WITH mysql_native_password BY 'master2018!';
GRANT REPLICATION SLAVE ON *.* TO 'cp_user'@'172.20.201.24';
(注意:這里的cp_user 和 master2018! 是一會兒備份服務器配置是需要用到的master服務器的用戶名和密碼,需要記下來)
第二步:修改 MySQL配置文件: /etc/my.cnf,添加如下內容:
log-bin=mysql-bin
binlog_format=mixed
server-id=1 //服務器唯一性標識符,每台服務器配置必須保存不一樣
read-only=0
binlog-do-db=test_db//需要備份的那個數據庫名叫 “test_db”(可選)
auto-increment-increment=2 //這里設置用來台服務器來做備份,按個人情況定
auto-increment-offset=1 //表示這台服務器序號,從1開始,不超auto-increment-increment
//配置完該數據庫中插入第一個數據id=1,第二條數據id=3而不是2,避免的數據庫集群中id沖突
第三步:修改完畢保存后,重新啟動mysql
[root@localhost ~]# service mysqld restart
第四步:執行 mysql>show master status\G(看到下面信息)
mysql-bin.000002和154這兩個值需要記得后面有用(剛安裝完的數據庫可能是mysql-bin.000001
到這master已經配置完成了,下面配置備份服務.
B服務器操作:
第一步:修改MySQL /etc/my.cnf 文件,添加如下內容:
log-bin=mysql-bin
binlog_format=mixed
server-id=2 //服務器唯一性標識符,每台服務器配置必須保存不一樣
replicate-do-db=test_db //要同步的數據庫名
relay-log=mysql.relay.bin
log-slave-updates=ON
第二步:配置完保存修改,重新啟動mysql服務。
第三步:登錄B服務器的mysql服務器:執行下面命令(配置同步的主服務器)
CHANGE MASTER TO
MASTER_HOST='172.20.201.23',
MASTER_USER='cp_user',
MASTER_PASSWORD='master2018!',
MASTER_LOG_FILE='mysql-bin.000020',
MASTER_LOG_POS=155;
第四步:重啟B服務器的MySQL服務:service mysql restart
第五步:使用命令查看B服務器上mysql的slave運行情況,登陸mysql后,運行:
Show slave status\G
Last Error 為0 即可認為配置正確。
如果出現connection error 考慮關閉A服務器防火牆或清空iptables (iptables -F)
1.4.1.2 測試:
在A和B服務器上登陸MySQL運行如下腳本創建數據庫test_db;
CREATE DATABASE IF NOT EXISTS test_db default charset utf8 COLLATE utf8_general_ci;
單獨在A服務器上創建表,並插入數據
USE test_db;
CREATE TABLE user(
id int not null auto_increment,
user_name VARCHAR(50),
password VARCHAR(10) ,
name VARCHAR(50),
status VARCHAR(10) ,
constraint pk__person primary key(id)
);
INSERT INTO user (`user_name`,`password`,`name`,`status`) VALUES('admin','admin','admin','1');
到B服務器上test_db中查看是否同步了相同的表和數據
已同步,則配置A—>B 的主從復制完成
1.4.1.3 小結
至此,A—>B的主從復制搭建完畢
1.4.2 搭建 B—>A 的主從復制
1.4.2.1 操作步驟
實際就是步驟一的逆向操作。將B(192.168.62.129)作為主服務器,A(192.168.62.130)作為從服務器。步驟基本和上面一樣。 其中 A、B服務器的\etc\my.cnf配置文件 繼續追加 主從配置內容即可。
1、在B中創建備份用戶
CREATE USER 'cp_user'@'172.20.201.23' IDENTIFIED WITH mysql_native_password BY 'master2018!';
GRANT REPLICATION SLAVE ON *.* TO 'cp_user'@'172.20.201.23';
2、打開 /etc/my.cnf , 開啟B的binarylog:
新增配置如下:
3、不需要導出B的初態同步到A上了,因為A和B的初態是一樣的(步驟一實現的),查看master日志狀態。
show master status\G
4、登錄到A服務器開啟中繼relay_log
5、在A服務器上開啟同步:
CHANGE MASTER TO
MASTER_HOST='172.20.201.24',
MASTER_USER='cp_user',
MASTER_PASSWORD='master2018!',
MASTER_LOG_FILE='mysql-bin.000017',
MASTER_LOG_POS=155;
host為B的IP地址,user、password是在B上創建的備份用戶,log_file、log_pos是在B上看到的master狀態信息。
6、在A上查看slave status.
如果IO進程和SQL進程都為YES,說明從B到A的同步成功。
1.4.2.2 測試
在A、B兩台服務器中任意一台的MySQL test_db中添加數據另外一台都自動同步。
1.4.2.3 小結
至此,MySQL雙機熱互備配置完畢。