本節索引
實驗一:搭建主從復制
實驗二:為已存放大量數據的在用服務器搭建從服務器
實驗三:級聯復制
實驗四:提升一個從服務器為主服務器
實驗五:主主復制
實驗六:半同步復制
實驗七:實現主從SSL加密復制
實驗一:搭建主從復制
前期準備:
兩臺虛擬機
主服務器:??? ?CentOS7.4 ?192.168.30.10 ? ? ? ?提示符:藍色
從服務器:???? CentOS7.5? 192.168.30.18 ? ? ? ?提示符:黃色
主服務器:
vim /etc/my.cnf
[mariadb]
log-bin
server_id=1
log-basename=master??????????? 可選項
重啟mysql服務使生效
systemctl restart mariadb
創建有復制權限的用戶賬號
masql> grant replication slave on *.* to repluser@’192.168.30.%’ identified by ‘centos’;
導入一個數據庫hellodb
#mysql < hellodb_innodb.sql
此時查看當前使用的二進制日志:
masql> show master logs;
從服務器:
vim /etc/my.cnf
[mariadb]
server_id=2
read_only
重啟mysql服務使之生效
systemctl restart mariadb
使用有復制權限的用戶賬號連接至主服務器,并啟動復制線程
mysql> CHANGE MASTER TO
? MASTER_HOST=’192.168.30.10′,
? MASTER_USER=’repluser’,
? MASTER_PASSWORD=’centos’,
? MASTER_PORT=3306,
? MASTER_LOG_FILE=’mariadb-bin.000001′,
? MASTER_LOG_POS=245,
? MASTER_CONNECT_RETRY=10;
開始從服務器復制
mysql>start slaves;
此時我們可以查看從服務器的工作狀態
mysql> show slaves status\G;
此時我們看到從服務器已開始工作,并且已將主服務器的hellodb數據庫復制過來
mysql> show databases;
切換到主服務器,繼續測試,創建數據庫db1
mysql> create database db1;
切換回從服務器,我們看到,從服務同步成功
實驗二:為已存放大量數據的在用服務器搭建從服務器
前期準備:
主服務器數據庫仍沿用實驗一的主服務器,作為已運行且有數據的服務器
數據庫初始信息如下:
從服務器為新環境下的服務器
主服務器:
vim /etc/my.cnf
[mariadb]
log-bin
server_id=1
innod_file_per_table????? 單表存儲
log-basename=master?? 可選項,指定二進制文件前綴
重啟mysql服務使之生效
systemctl restart mariadb
創建有復制權限的用戶賬號
masql> grant replication slave on *.* to repluser@’192.168.30.%’ identified by ‘centos’;
查看當前主服務器二進制日志狀態
使用mysqldump全備份主服務器二進制日志
mysqldump -A -F –single-transaction –master-data=1 > all.sql
復制到新的從服務器
scp all.sql 192.168.30.18:/
從服務器:
[mariadb]
server_id=2
read_only??????? 只讀,防止普通用戶修改
重啟mysql服務
systemctl restart mysql
修改全備份添加入主服務器信息:
vim all.sql
找到此行
替換為:
CHANGE MASTER TO
? MASTER_HOST=’192.168.30.10′,
? MASTER_USER=’repluser’,
? MASTER_PASSWORD=’centos’,
? MASTER_PORT=3306,
? MASTER_LOG_FILE=’mariadb-bin.000002′,
? MASTER_LOG_POS=245,
? MASTER_CONNECT_RETRY=10;
在從服務器上導入全備份
mysql < all.sql
此時我們看到全備份中數據庫已導入成功
開啟從服務器復制
mysql> start slave;
查看從服務器工作狀態,已開始正常工作
mysql> show slave status;
切換到主服務器,繼續測試,創建數據庫db2
mysql> create database db2;
切換回從服務器,我們看到,從服務同步成功
實驗三:級聯復制
前期準備:
三臺虛擬機
主服務器:????? ? ?CentOS7.4? 192.168.30.10??????? 提示符:藍色
中間從服務器: CentOS7.5? 192.168.30.18??????? 提示符:黃色
從服務器: ? ? ? ? CentOS7.5? 192.168.30.19??????? 提示符:紅色
主服務器:
vim /etc/my.cnf
[mariadb]
log-bin
server_id=1
重啟mysql
systemctl restart mariadb
創建有復制權限的用戶賬號
masql> grant replication slave on *.* to repluser@’192.168.30.%’ identified by ‘centos’;
中間從服務器:
vim /etc/my.cnf
[mariadb]
log-bin
server_id=2
log_slave_updates
read_only
重啟mysql服務
systemctl restart mariadb
填寫master服務信息,即主服務器信息
mysql> CHANGE MASTER TO
? MASTER_HOST=’192.168.30.10′,
? MASTER_USER=’repluser’,
? MASTER_PASSWORD=’centos’,
? MASTER_PORT=3306,
? MASTER_LOG_FILE=’mariadb-bin.000001′,
? MASTER_LOG_POS=245,
? MASTER_CONNECT_RETRY=10;
開啟從服務器
start slave;
從服務器:
vim /etc/my.cnf
[mariadb]
server_id=3
read_only
重啟mysql服務
systemctl start mariadb
指定主服務器,即中間從服務器
mysql> CHANGE MASTER TO
? MASTER_HOST=’192.168.30.18′,
? MASTER_USER=’repluser’,
? MASTER_PASSWORD=’centos’,
? MASTER_PORT=3306,
? MASTER_LOG_FILE=’mariadb-bin.000001′,
? MASTER_LOG_POS=245,
? MASTER_CONNECT_RETRY=10;
開啟從服務
mysql> start slave;
查看從服務器工作狀態
mysql> show slave status;
測試:
主服務器導入hellodb數據庫,測試是否同步成功
#mysql < hellodb_innodb.sql
中間服務器,我們看到hellodb數據庫已同步成功
再切換至從服務器,hellodb數據庫也同步成功,至此我們實現了數據庫服務器的級聯復制
實驗四:提升一個從服務器為主服務器
模擬場景:
當主服務器出現損壞時,我們需要提升一臺從服務器作為主服務器使用,由于每臺從服務器同步的數據完
整情況可能不同,所有第一步應該選出數據同步最完整的從服務器。
那么,如何查看同步數據的完整性呢?
當slave開啟成功后,會在mysql目錄下生產一個master.info的文件,里面統計的是master服務器的相關信
息,其中介于二進制文件名與主機名之間的數字即為已同步數據量,我們只需要打開每一臺從服務器,觀
察這個值,取最大的一臺從服務器即可
cat /var/lib/mysql/master.info
將此從服務器配置修改為主服務器配置
[mariadb]
log-bin
server_id=1
再將其他從服務器的master重新執行此臺從服務器即可
清除其他從服務器原有master配置信息
mysql> reset slave all;
mysql> CHANGE MASTER TO
? MASTER_HOST=’192.168.30.XX’,
? MASTER_USER=’repluser’,
? MASTER_PASSWORD=’centos’,
? MASTER_PORT=3306,
? MASTER_LOG_FILE=’mariadb-bin.00000X’,
? MASTER_LOG_POS=XXX,
? MASTER_CONNECT_RETRY=10;
實驗五:主主復制
主主復制:互為主從
容易產生的問題:數據不一致;因此慎用
前期準備:
虛擬機2臺
主服務器1:???? CentOS7.4? 192.168.30.10??????? 提示符:藍色
主服務器2: ????CentOS7.5? 192.168.30.18??????? 提示符:黃色
主服務器1:
vim /etc/my.cnf
log-bin
server_id=1
auto_increment_offset=1
auto_increment_increment=2?????? #自動遞增,避免數據沖突,當三臺互為主從,改為3
重啟mysql服務
systemctl restart mariadb
創建賬號
masql> grant replication slave on *.* to repluser@’192.168.30.%’ identified by ‘centos’;
互相添加master配置為對方:
mysql> CHANGE MASTER TO
? MASTER_HOST=’192.168.30.18′,
? MASTER_USER=’repluser’,
? MASTER_PASSWORD=’centos’,
? MASTER_PORT=3306,
? MASTER_LOG_FILE=’mariadb-bin.000001′,
? MASTER_LOG_POS=245,
? MASTER_CONNECT_RETRY=10;
mysql> start slave;
主服務器2:
vim /etc/my.cnf
log-bin
server_id=2
auto_increment_offset=2
auto_increment_increment=2
重啟mysql服務
systemctl restart mariadb
創建賬號
masql> grant replication slave on *.* to repluser@’192.168.30.%’ identified by ‘centos’;
添加master配置:
mysql> CHANGE MASTER TO
? MASTER_HOST=’192.168.30.10′,
? MASTER_USER=’repluser’,
? MASTER_PASSWORD=’centos’,
? MASTER_PORT=3306,
? MASTER_LOG_FILE=’mariadb-bin.000001′,
? MASTER_LOG_POS=245,
? MASTER_CONNECT_RETRY=10;
mysql> start slave;
測試:
主服務器1創建db1數據庫:
mysql> create database db1;
主服務器2創建db2數據庫:
mysql> create database db1;
分別查看兩臺主服務器均同步成功
當在主服務器1數據庫中不指定ID添加數據時,默認以奇數遞增;同理主服務2默認以偶數遞增;主主復制
就是通過此種方法來避免數據可能出現的沖突。
實驗六:半同步復制
應用場景:
默認情況下,MySQL的復制功能是異步的,這就會造成主服務器和從服務器的數據不一致,甚
至在恢復時造成數據的丟失。半同步復制能夠使從服務器始終有一臺數據與主服務器保持一致,避免出現
數據丟失。在生產環境中,一般都要搭建半同步復制。
主服務器需要安裝的mysql插件:semisync_master.so
從服務器需要安裝的musql插件:semisync_slave.so
主服務器:
安裝semisync_master.so插件
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME ‘semisync_master.so’;
查看master半同步相關變量:
mysql> show global variables like ‘%semi%’;
啟用master半同步功能
mysql> set global rpl_semi_sync_master_enabled=on;
從服務器:
同理在從服務器安裝semisync_slave.so
mysql> INSTALL PLUGIN rpl_semi_sync_master SONAME ‘semisync_slave.so’;
mysql> show global variables like ‘%semi%’;
啟用slave半同步功能
mysql> set global rpl_semi_sync_slave_enabled=on;
至此,主從服務器的半同步復制就搭建完成了
實驗七:實現主從SSL加密復制
前期準備:
三臺虛擬機
CA: ? ? ? ? ? ? ? ?CentOS7.4? 192.168.30.10??????? 提示符:藍色
主服務器:??? ?CentOS7.5? 192.168.30.20 ? ? ? ?提示符:黃色
從服務器:???? CentOS7.5? 192.168.30.17 ? ? ? ?提示符:紅色
生成CA的私鑰
cd /etc/my.cnf.d/ssl
openssl genrsa 2048 > cakey.pem
生成自簽名
openssl req -new -x509 -key cakey.pem -out cacert.pem -days 3650
ls /etc/my.cnf.d/ssl
cacert.pem
cakey.pem
在本機生成master和slave的私鑰
同時生成主服務器的私鑰和簽名請求
openssl req -newkey rsa:2048 –days 365 -nodes -keyout master.key > master.csr
CN
beijing
beijing
magedu.com
opt
master.magedu.com
頒發證書
openssl x509 -req -in master.csr -CA cacert.pem -CAkey cakey.pem -set_serial 01 > master.crt
此時ssl目錄下的文件有
繼續生成從服務器的私鑰和簽名請求
openssl req -newkey rsa:2048 -days365 -nodes -keyout slave.key > slave.csr
CN
beijing
beijing
magedu.com
opt
slave.magedu.com
頒發證書
openssl x509 -req -in slave.csr -CA cacert.pem -CAkey cakey.pem -set_serial 01 > slave.crt
此時ssl目錄下文件有
scp -r /etc/my.cnf.d/ssl 192.16.30.17:/etc/my.cnf.d
scp -r /etc/my.cnf.d/ssl 192.16.30.27:/etc/my.cnf.d
master 服務器保留下列文件 cacert.pem master.crt master.key
slave? 服務器保留下列文件 cacert.pem slave.crt slave.key
Master服務器配置
[mysqld]
log-bin
server_id=1
ssl
ssl-ca=/etc/my.cnf.d/ssl/cacert.pem
ssl-cert=/etc/my.cnf.d/ssl/master.crt
ssl-key=/etc/my.cnf.d/ssl/master.key
重啟mysql服務
systemctl retart mariadb
查看是否生效
mysql> show variables like ‘%ssl’
創建用戶且要求必須以加密方式連接
masql> grant replication slave on *.* to repluser@’192.168.30.%’ identified by ‘centos’ require ssl;
可以在slave端測試replusr用戶用ssl連接
mysql -urepluser -pcentos -h192.168.30.17 –ssl-ca=cacert.pem –ssl-cert=slave.crt –ssl-key=slave.key
slave服務器配置
第一種方法:CHANGE? MASTER TO
[mysqld]
serverid=2
ssl
重啟mysql服務
systemctl restart mariadb
查看是否生效
mysql> show variables like ‘%ssl’
配置master服務器信息
mysql> CHANGE MASTER TO MASTER_HOST=’192.68.30.20′,
? MASTER_USER=’repluser’,
? MASTER_PASSWORD=’centos’,
? MASTER_PORT=3306,
? MASTER_LOG_FILE=’ mariadb-bin.000001′,
? MASTER_LOG_POS=245,
? MASTER_CONNECT_RETRY=10,
? MASTER_SSL=1,
? MASTER_SSL_CA = ‘/etc/my.cnf.d/ssl/cacert.pem’,
? MASTER_SSL_CERT = ‘/etc/my.cnf.d/ssl/slave.crt’,
? MASTER_SSL_KEY = ‘/etc/my.cnf.d/ssl/slave.key’;
開啟從服務器
mysql> start slave
測試:
master創建一個數據庫
查看slave是否同步
第二種方法:寫入配置
stop slave;
reset slave all;
[mysqld]
log-bin
server_id=2
ssl
ssl-ca=/etc/my.cnf.d/ssl/cacert.pem
ssl-cert=/etc/my.cnf.d/ssl/slave.crt
ssl-key=/etc/my.cnf.d/ssl/slave.key
master服務器:
mysql> show master logs;
000002? 493
slave服務器:
mysql> CHANGE MASTER TO MASTER_HOST=’192.68.30.17’,
? MASTER_USER=’repluser’,
? MASTER_PASSWORD=’centos’,
? MASTER_PORT=3306,
? MASTER_LOG_FILE=’master-bin.000002′,
? MASTER_LOG_POS=493,
? MASTER_CONNECT_RETRY=10;
? MASTER_SSL=1
本文來自投稿,不代表Linux運維部落立場,如若轉載,請注明出處:http://www.www58058.com/101131