MariaDB 主從同步與熱備(14)
MariaDB資料庫管理系統是MySQL的一個分支,主要由開源社群在維護,採用GPL授權許可MariaDB的目的是完全相容MySQL,包括API和命令列,MySQL由於現在閉源了,而能輕鬆成為MySQL的代替品.在儲存引擎方面,使用XtraDB來代替MySQL的InnoDB,MariaDB由MySQL的創始人Michael Widenius主導開發,他早前曾以10億美元的價格,將自己建立的公司MySQL AB賣給了SUN,此後,隨著SUN被甲骨文收購MySQL的所有權也落入Oracle的手中.MariaDB名稱來自MichaelWidenius的女兒Maria的名字.
MariaDB資料庫自身提供的主從複製功能可以方便的實現資料的多處自動備份,還能實現資料庫的拓展,多個數據備份不僅可以加強資料的安全性,通過實現讀寫分離還能進一步提升資料庫的負載效能,為大規模企業MariaDB叢集提供了有利的技術支撐.
MariaDB 主-從 同步配置
基於一臺伺服器的資料複製,故得名單機熱備,主-備 Active-Standby
主-備方式,即指的是一臺伺服器處於某種業務的啟用狀態(即Active狀態),另一臺伺服器處於該業務的備用狀態(即Standby狀態),主資料庫資料更新後,備份伺服器同步資料只本機
◆兩臺同步執行◆
1.安裝Mariadb,設定初始密碼,啟動服務,並設定開機自啟動,這裡的配置步驟應在兩臺主機上同步執行
yum install -y mariadb mariadb-server systemctl restart mariadb mysql_secure_installation
2.修改MariaDB主配置檔案,寫入log-bin引數開啟二進位制日誌檔案,然後寫入server-id指定本臺MariaDB伺服器的ID號(注意:這裡主從不要重複)
vim /etc/my.cnf
[mysqld]
log-bin=mysql-bin #開啟二進位制日誌檔案
server-id=12 #本臺MySQL伺服器ID(主從不能重複)
systemctl restart mariadb #重啟生效
◆主資料庫執行◆
1.進入主MariaDB資料庫,授權給從資料庫登陸的賬號,這裡顯示二進位制日誌檔案大小並記錄下來
grant replication slave on *.* to "使用者名稱"@'%' identified by "密碼"; #建立用於從伺服器登陸的賬號 show master status; #顯示日誌狀態 MariaDB [(none)]> show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000002 | 245 | | | +------------------+----------+--------------+------------------+ row in set (0.00 sec)
◆從資料庫執行◆
1.進入從MariaDB資料庫,使用主資料庫授權的使用者名稱,密碼,以及相應的日誌檔名稱 master_log_file,和日誌檔案位置 master_log_pos,此處在主資料庫上獲取即可
change master to master_host='伺服器IP',master_user='授權賬號',master_password='密碼',master_log_file='日誌檔案',master_log_pos=檔案位置;
start slave; #啟用同步
show slave status\G; #檢視同步狀態
注意:兩個狀態同時開啟即可
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
MariaDB 主-主 同步配置
基於兩臺伺服器的複製方式較多,故得名雙機熱備,雙主機方式即指兩種不同業務分別在兩臺伺服器上互為主備狀態(即 Active-Standby和Standby-Active狀態),這裡需要注意的是主-主同步配置,其實就是兩臺MariaDB資料庫互為主從,所以,要在兩臺主機間作兩次相同的操作
◆兩臺同步執行◆
1.安裝MariaDB,設定初始密碼,啟動服務,並設定開機自啟動,這裡的配置步驟應在兩臺主機上同步執行
yum install -y mariadb mariadb-server
systemctl restart mariadb
mysql_secure_installation
2.將 MariaDB1 的資料拷貝到 MariaDB2 上,實現資料的一致性,(注意:這裡應先鎖定表結構,防止資料不一致)
flush tables with read lock; #鎖定資料表為只讀模式
mysqldump -u root -p --all-databases >back.sql #備份資料庫
scp back.sql [email protected]:/root #將資料傳遞到遠端主機
unlock tables; #解除表鎖定
mysql -uroot -p <back.sql #從資料庫恢復資料
3.修改MariaDB主配置檔案(注意:兩臺都要修改),開啟二進位制日誌和制定伺服器ID號
vim /etc/my.cnf
[mysqld]
log-bin=mysql-bin #開啟二進位制日誌
server-id=10 #指定伺服器ID號(兩臺不允許重複)
replicate-do-db=test #要同步的資料庫
binlog-ignore-db=mysql #不需要同步的資料庫
binlog-ignore-db=information_schema #不需要同步的資料庫
auto-increment-increment=2 #每次自增長2
auto-increment-offset=1 #自增長從1開始
systemctl restart mariadb
◆MariaDB1 執行◆
1.進入 MariaDB1 資料庫,建立用於從資料庫登陸的賬號和密碼
grant replication slave on *.* to '使用者名稱'@'%' identified by '密碼'; #建立用於從資料庫登陸的使用者
show master status; #檢視二進位制檔名
2.進入 MariaDB2 資料庫,同步資料
change master to master_host='主伺服器IP',master_user='授權賬號',master_password='密碼',master_log_file='二進位制文名',master_log_pos=檔案空間大小;
start slave; #啟動同步功能
show slave status\G; #檢視同步狀態
◆MariaDB2 執行◆
1.進入 MariaDB2 資料庫,建立用於從資料庫登陸的賬號和密碼
grant replication slave on *.* to '使用者名稱'@'%' identified by '密碼'; #建立用於從資料庫登陸的使用者
show master status; #檢視二進位制檔名
2.進入 MariaDB1 資料庫,同步資料
change master to master_host='主伺服器IP',master_user='授權賬號',master_password='密碼',master_log_file='二進位制文名',master_log_pos=檔案空間大小;
start slave; #啟動同步功能
show slave status\G; #檢視同步狀態
MariaDB 主-主-從 同步配置
主-主-從,字面意思就是,兩個主一個從,主要用於資料備份,一次性備份兩個主資料庫資源,這樣一個從資料庫,就可以同時備份多個主資料庫了,節約了寶貴的伺服器資源
◆兩臺主資料庫執行◆
1.兩臺主伺服器都需要安裝MySQL初始化並設定密碼
yum install -y mariadb mariadb-server
systemctl restart mariadb
mysql_secure_installation
2.兩臺主伺服器都應配置以下內容(兩臺主MySQL都需要配置)
vim /etc/my.cnf #修改配置檔案
寫入以下內容↓
log-bin=mysql-bin #開啟二進位制日誌
server-id=147 #伺服器ID號
systemctl restart mariadb #重啟服務
3.登陸主MySQL並建立使用者從伺服器登陸的使用者 (兩臺主MySQL都需要配置)
mysql -uroot –p #登陸MySQL
grant replication slave on *.* to '授權使用者'@'%' identified by '密碼'; #建立從伺服器使用者
show master status; #顯示日誌狀態
◆從資料庫應執行的步驟◆ 切記此MySQL不能啟動
1.修改從MySQL主配置檔案
vim /etc/my.cnf
寫入以下內容↓
[mysqld_multi]
mysqld=/usr/bin/mysqld_safe
mysqladmin=/usr/bin/mysqladmin
log=/tmp/multi.log
[mysqld147] #名稱後面加數字,後期啟動用(不應相同)
port=3306 #埠號(不應相同)
pid-file=/var/lib/mysqla/mysqld.pid #MySQL程序號儲存位置
datadir=/var/lib/mysqla #資料檔案儲存位置
socket=/var/lib/mysqla/mysql.sock #指定登陸套接字
server-id=110 #ID號,同一主從環境不能相同
user=mysql #MySQL登陸使用者名稱
[mysqld148] #名稱後面加數字,後期啟動用(不應相同)
port=3307 #埠號(不應相同)
pid-file=/var/lib/mysqlb/mysqld.pid #MySQL程序號儲存位置
datadir=/var/lib/mysqlb #資料檔案儲存位置
socket=/var/lib/mysqlb/mysql.sock #指定登陸套接字
server-id=110 #ID號,同一主從環境不能相同
user=mysql #MySQL登陸使用者名稱
2.初始化資料庫
mysql_install_db --datadir=/var/lib/mysqla --user=mysql #初始化資料庫a
mysql_install_db --datadir=/var/lib/mysqlb --user=mysql #初始化資料庫b
3.給相應目錄賦予許可權
cd /var/lib/
chown -R mysql:mysql /var/lib/mysqla/ #修改a檔案許可權
chown -R mysql:mysql /var/lib/mysqlb/ #修改b檔案許可權
4.啟動相應伺服器
mysqld_multi --defaults-file=/etc/my.cnf start 147 #開啟147伺服器
mysqld_multi --defaults-file=/etc/my.cnf start 148 #開啟148伺服器
5.登陸147和148資料庫確定主從關係
mysql -P 3306 -S /var/lib/mysqla/mysql.sock #登陸147資料庫
mysql -P 3306 -S /var/lib/mysqlb/mysql.sock #登陸148資料庫
change master to master_host='伺服器IP',master_user='授權賬號',master_password='密碼',master_log_file='日誌檔案',master_log_pos=檔案位置;
start slave; #啟用同步
show slave status\G; #檢視同步狀態