mysql多主一叢的配置

目前有個需求,希望把公司的多個mysql數據庫備份,有一臺服務器存儲比較大,計劃把其他的mysql備份到這上面,一開始計劃使用dump回傳,後來發現有些庫數據比較大,因此使用master-slave,即多主一叢。

1 先在備份服務器安裝mysql,開啓mysqlmulti模式,配置my.cnf

[mysqld_multi]
mysqld=/usr/bin/mysqld_safe
mysqladmin=/usr/bin/mysqladmin
user = ‘your_user’
password=‘your_password’
log=/home/mysql/log/multi.log
[client]
#password       = your_password
[mysqld1]
#主庫1
port = 3306
socket=/tmp/mysql1.sock
pid-file=/home/mysql/mysqldata1/mysql1.pid
datadir=/home/mysql/mysqldata1
character_set_server=utf8
character_set_client=utf8
collation-server=utf8_general_ci
#(注意linux下mysql安裝完後是默認:表名區分大小寫,列名不區分大小寫; 0:區分大小寫,1:不區分大小寫)  
lower_case_table_names=1
max_connections=1000
server-id = 1

#要備份的庫

replicate-do-db = mysql1

slave_skip_errors= 1158 1159 1008 1007 1062 1452
#slave_skip_errors= all
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES 

[mysqld2]
#主庫2
port = 3307
socket=/tmp/mysql2.sock
pid-file=/home/mysql/mysqldata2/mysql2.pid
datadir=/home/mysql/mysqldata2
character_set_server=utf8
character_set_client=utf8
collation-server=utf8_general_ci
#(注意linux下mysql安裝完後是默認:表名區分大小寫,列名不區分大小寫; 0:區分大小寫,1:不區分大小寫)
lower_case_table_names=1
max_connections=1000
server-id = 2

#要備份的庫
replicate-do-db = mysql2
slave_skip_errors=1158 1159 1008 1007 1062 1452
innodb_flush_log_at_trx_commit=2
innodb_buffer_pool_size= 268435456
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES

2 啓動關閉數據庫,my.cnf配置好,啓動時會自動創建文件和庫文件,注意賬號權限。

mysqld_multi start 1
mysqld_multi stop 1

mysqld_multi start 2

mysqld_multi stop 2

3 設置各數據的密碼

/usr/bin/mysqladmin -u root password 'you_password' -S /tmp/mysql1.sock

/usr/bin/mysqladmin -u root password 'you_password' -S /tmp/mysql2.sock

測試能關閉啓動數據庫,密碼能進入

4 各主庫設置同步賬號,注意授權和同步庫,我這裏是全部同步,偷懶全部授權了莫學。

grant all privileges on *.* to 'your_user'@'%' identified by 'you_password';

5主庫要開log-bin,即在主庫my.cnf增加重啓,開過這步可省略

server-id=219  #主庫和備庫id不能重複
log-bin=mysql-bin
expire_logs_days=8

6 導出備份庫,具體參數含義百度吧,我這裏就不詳細介紹了

mysqldump -uroot -p --single-transaction --flush-logs --master-data=2 mysql1  > mysql1.sql

mysqldump -uroot -p --single-transaction --flush-logs --master-data=2 mysql2  > mysql2.sql

查看主庫導出的事務位置,即找到CHANGE MASTER這行

 head -22 mysql1.sql

-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=120;

head -22 mysql2.sql

-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=147774;

7 將導出文件傳到備庫並導入,導入前要創建數據庫名

mysql -S /tmp/mysql1.sock  -uroot -p mysql1 < /root/mysql1.sql

mysql -S /tmp/mysql1.sock  -uroot -p mysql2 < /root/mysql2.sql

8 導入成功後,在備庫啓用同步,注意MASTER_LOG_FILE和 MASTER_LOG_POS和第6步有關係

change master to master_user='you_user',master_password='your_password',master_host='your_host',master_port=your_port,
MASTER_LOG_FILE='mysql-bin.000002', MASTER_LOG_POS=120;

change master to master_user='you_user',master_password='your_password',master_host='your_host',master_port=your_port,
MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=147774;

start slave;

show slave status\G;  查看同步狀態

至此兩主一叢基本完成,中間若出現問題根據問題報錯解決,mysql相對來說上手還是比較簡單,網上各種問題的介紹也比較多,大家可以參考。







發佈了27 篇原創文章 · 獲贊 15 · 訪問量 15萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章