1. 程式人生 > >MySQL新增從庫

MySQL新增從庫

MySQL 主從 xtrabackup 從庫 主從復制

項目背景描述:

在項目的開始只有一個MySQL實例在運行,後期因為安全性,壓力,備份等原因需要在此實例的基礎上面新增一個從庫。


分析:

MySQL主從是基於binlog日誌來實現的,那麽需要主服務器開啟binlog,此選項默認是關閉。我這邊服務器在部署的時候就開啟了,因為使用binlog可以用來恢復MySQL數據,並且還為以後做主從做好準備,所以我們推薦大家在部署主服務器的時候就開啟此選項。另外在做主從的時候還需要主庫和從庫的server-id唯一,server-id在做主從的時候也是相當關鍵的一薦參數。

另外因為我們MySQL主庫已經運行一段時間了,裏面已經有相當多數據,我們需要將這些數據備份出來,然後從庫再從備份的節點同步數據,這樣來保持主從的數據一致性,並且在操作過程中最好不要影響我們的業務正常運行。最終決定使用xtrabackup來備份數據,因為用xtrabackup備份數據的時候不需要瑣表,但只限於InnoDB引擎的數據庫和XtraDB引擎的數據庫,對於MyISAM引擎的數據庫還是會瑣表,剛好我們的數據庫引擎使用的是InnoDB


操作步驟:

第一步:部署從數據庫服務器,最好數據庫版本一致,部署過程省略


第二步:修改配置文件

# 以下為主服務器需要修改的配置,server_id不一定為82,可以為任何一個數字,比如我們可以用本機的IP最後一位
log_bin = mysql-bin
datadir=/data/mysql               #此選項一定要指定,就算有默認也需要指定
server_id = 82

# 以下為可選項
binlog-ignore-db =mysql,test           #指定忽略不同步的數據庫
binlog-do-db=discuz,phpcms           #指定要同步的數據庫

在主服務器上面授權從服務器一個主從同步賬號

mysql> grant replication slave on *.* to 'username'@'hostip' identified by 'password'


# 以下為從服務器需要修改的配置
datadir=/data/mysql                  #此選項一定要指定,就算有默認也需要指定
server_id = 2

# 以下為可選項
replicate-do-db                    #指定需要同步的數據庫
replicate-ignore-db                  #指定不同步的數據庫
replicate-do-table                   #指定需要同步的表
replicate-ignore-table                  #指定不同步的表
replicate-wild-do-table                  #指定需要同步的表,可以使用通配符,如test.tables1*
replicate-wild-ignore-table                  #指定不需要同步的表,可以使用通配符


第三步:安裝xtrabackup工具

新增yum源

cat >> /etc/yum.repos.d/xtrabackup.repo << EOF
[percona]
name = CentOS $releasever - Percona
baseurl=http://repo.percona.com/centos/$releasever/os/$basearch/
enabled = 1
gpgkey = file:///etc/pki/rpm-gpg/RPM-GPG-KEY-percona
gpgcheck = 0
EOF

註意:執行完上面命令後註意對比下文件,有可能$releaserver $basearch需要手工添加

安裝xtrabackup

yum -y install percona-xtrabackup


第四步:備份數據

註意:以需要使用root用戶執行,或者使用sudo權限執行

備份整個庫

xtrabackup --user=root --password=root --target-dir=/opt/backups --backup

--user 指定數據庫訪問用戶名

--password 指定數據庫訪問密碼,如果密碼有特殊字符需要使用單引號引起來

--target-dir 指定備份路徑,最好寫絕對路徑

--backup 與--target-dir選項一起使用

備份單個庫

xtrabackup --user=root --password=root --databases=app_test --target-dir=/opt/backups --backup

--databases 指定需要備份的庫名

備份多個庫

xtrabackup --user=root --password=root --databases="app_test webservice" --target-dir=/opt/backups --backup

--databases 多庫用雙引號引起來,使用空格進行分隔

備份某個庫的指定表

xtrabackup --user=root --password=root --databases="nirvana.user_info nirvana.card_info" --target-dir=/opt/backups --backup

--databases 備份表使用庫名.表名的方式,如果是多個表就使用雙引號引起來,不同表使用空格分隔


第五步:將備份數據復制到從服務器

scp -pr /opt/backups username@hostname:/path/to


第六步:將數據還原到從服務器

還原之前需要清空從服務器數據目錄,如果有需要的數據就先備份到其實地方

整個庫還原


還原單個庫

還原多個庫

還原某張表

執行以下命令

xtrabackup --copy-back --target-dir=/path/to

第七步:啟用主從

執行以下命令

mysql> change master to master_host='192.168.1.71',master_port=3306,master_user='test',master_password='123456',master_log_file='mysql-bin.000004',master_log_pos=107;

master_host:

master_port:

master_user:

master_password:

master_log_file:

master_log_pos:

執行以下命令啟用主從同步

mysql> start slave;

小知識:停止主從同步命令為

mysql> stop slave;


第七步:測試並檢查主從狀態

mysql> show slave status \G;

如果看以以下兩個值為Yes說明主從同步正常

Slave_IO_Running: Yes
Slave_SQL_Running: Yes


第八步:測試

可以修改下需要同步的庫,或者表的數據看上是否能正常同步去,或者在備份完的時候就去修改下數據,這時候備份裏同是沒有此修改記錄,當啟用主從同步的時候看下數據是否會同步過來

MySQL新增從庫