MySQL之主從復制相關實驗

本節索引

實驗一:搭建主從復制

實驗二:為已存放大量數據的在用服務器搭建從服務器

實驗三:級聯復制

實驗四:提升一個從服務器為主服務器

實驗五:主主復制

實驗六:半同步復制

實驗七:實現主從SSL加密復制

 

 

實驗一:搭建主從復制

47]AE@]H{K1M1TKS)P)4QJT

前期準備:

兩臺虛擬機

主服務器:??? ?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??????????? 可選項

1

重啟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;

2

 

從服務器:

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;

3

開始從服務器復制

mysql>start slaves;

此時我們可以查看從服務器的工作狀態

mysql> show slaves status\G;

4

此時我們看到從服務器已開始工作,并且已將主服務器的hellodb數據庫復制過來

mysql> show databases;

5

切換到主服務器,繼續測試,創建數據庫db1

mysql> create database db1;

切換回從服務器,我們看到,從服務同步成功

6

 

 

實驗二:為已存放大量數據的在用服務器搭建從服務器

前期準備:

主服務器數據庫仍沿用實驗一的主服務器,作為已運行且有數據的服務器

數據庫初始信息如下:

1

從服務器為新環境下的服務器

 

主服務器:

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’;

查看當前主服務器二進制日志狀態

2

使用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

找到此行

3

替換為:

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;

4

在從服務器上導入全備份

mysql < all.sql

此時我們看到全備份中數據庫已導入成功

5

開啟從服務器復制

mysql> start slave;

查看從服務器工作狀態,已開始正常工作

mysql> show slave status;

6

切換到主服務器,繼續測試,創建數據庫db2

mysql> create database db2;

切換回從服務器,我們看到,從服務同步成功

7

 

 

 

實驗三:級聯復制

1

前期準備:

三臺虛擬機

主服務器:????? ? ?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

2

重啟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

3

重啟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

4

重啟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;

5

測試:

主服務器導入hellodb數據庫,測試是否同步成功

#mysql < hellodb_innodb.sql

中間服務器,我們看到hellodb數據庫已同步成功

6

再切換至從服務器,hellodb數據庫也同步成功,至此我們實現了數據庫服務器的級聯復制

7

 

 

 

實驗四:提升一個從服務器為主服務器

模擬場景:

當主服務器出現損壞時,我們需要提升一臺從服務器作為主服務器使用,由于每臺從服務器同步的數據完

整情況可能不同,所有第一步應該選出數據同步最完整的從服務器。

那么,如何查看同步數據的完整性呢?

當slave開啟成功后,會在mysql目錄下生產一個master.info的文件,里面統計的是master服務器的相關信

息,其中介于二進制文件名與主機名之間的數字即為已同步數據量,我們只需要打開每一臺從服務器,觀

察這個值,取最大的一臺從服務器即可

cat /var/lib/mysql/master.info

1

將此從服務器配置修改為主服務器配置

[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;

 

 

 

 

實驗五:主主復制

1

主主復制:互為主從

容易產生的問題:數據不一致;因此慎用

 

前期準備:

虛擬機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

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.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

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.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;

分別查看兩臺主服務器均同步成功

4

當在主服務器1數據庫中不指定ID添加數據時,默認以奇數遞增;同理主服務2默認以偶數遞增;主主復制

就是通過此種方法來避免數據可能出現的沖突。

5

 

實驗六:半同步復制

應用場景:

默認情況下,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%’;

1

啟用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%’;

2

啟用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

1

 

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目錄下的文件有

2

繼續生成從服務器的私鑰和簽名請求

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目錄下文件有

3

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

4

查看是否生效

mysql> show variables like ‘%ssl’

5

創建用戶且要求必須以加密方式連接

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

(0)
wangxczwangxcz
上一篇 2018-06-18
下一篇 2018-06-19

相關推薦

  • 計算機的組成及功能(硬件及操作系統)

    主要從計算機的硬件和操作系統兩方面介紹了計算機的組成及功能

    2018-05-11
  • selinux 和 awk的使用

    selinux 和 awk的使用

    Linux筆記 2018-05-15
  • MySQL之SQL語法介紹

    結構化查詢語言(Structured Query Language)簡稱SQL,是一種特殊目的的編程語言,是一種數據庫查詢和程序設計語言,用于存取數據以及查詢、更新和管理關系數據庫系統;同時也是數據庫腳本文件的擴展名

    2018-06-07
  • mysql 高可用

    實驗:集群高可用 一個管理——一個主——兩個從 管理 主機 從機1 從機2 1.必須先統一時間,做集群必須時間一致,所有主機做如下操作 所有主機統一ntp服務器時間,寫入文件里 前期需要手工同步下 啟用ntp服務 2.所有主機關掉iptables 和selinux 3.先做主從復制 主機配置文件 這四項必須寫 重啟服務 查看主機二進制文件的位置 主機創建賬號…

    2018-06-19
  • 創建配置格式文件的格式 C語言源代碼安裝三步驟 yum

    創建配置文件的格式: [base] name= centos cdrom mirrorlist=file:///root/baselist gpgkey=file:///mnt/cdrom/rpm-gpg-key-centos-7     [epel] name=epel baseurl=https://mirrors aliyun.co…

    Linux筆記 2018-04-22
  • 第三周作業

    1 列出當前系統上所有已經登陸的用戶的用戶名,注意:同一個用戶名登陸多次,則只顯示一次。
    2 取出最后登陸到當前系統的用戶的相關信息。
    3 取出當前系統上被用戶當作其默認shell的最多的那個shell.
    4 將/etc/passwd中的第三個字段數值最大的后10個用戶的信息全部改為大寫后保存至/tmp/maxusers.txt文件中。
    5 取出當前主機的IP地址,提示:對ifconfig命令的結果進行切分。
    6 列出/etc目錄下所有以.conf結尾的文件的文件名,并將其名字裝換為大寫后保存至/tmp/etc.conf文件中。
    7 顯示/var目錄下一級子目錄或文件的總個數。
    8 取出/etc/group文件中第三個字符段數值最小的10個組的名字。
    9 將/etc/fstab和/etc/issue文件的內容合并為同一個內容后保存至/tmp/etc.test文件中。
    10. 請總結描述用戶和組管理類命令的使用方法并完成以下練習:
    (1)創建組distro, 其GID為2016
    (2)創建用戶mandriva, 其ID號為1005,基本組為distro
    (3)創建用戶mageia, 其ID號為1100,家目錄為/home/linux
    (4)給用戶mageia添加密碼,密碼為mageedu
    (5)刪除mandriva, 但保留其家目錄
    (6)創建用戶slackware, 其ID號為2002, 基本組為distro, 附加組為peguin
    (7)修改slackware的默認shell為/bin/tcsh
    (8)為用戶slackware的新增附加組admins

    2018-06-05
欧美性久久久久