配置 MySQL 主從服務結構 mysql
網絡上配置 MySQL 主從服務器結構的文章不少, 本文的主要目的不是再給其
添加一個, 而是:
1. 公司項目使用 MySQL 主從, 寫下來之後若是出問題, 能夠從新配置.(備忘)
2. 本身不致於遺忘, 由於配置這種事是一次性的, 不是須要熟練的工做.
3. 使別人放心. linux
配置共6步, 分別以下:
1. 在主 MySQL 配置文件 my.cnf, 在咱們的 Ubuntu linux 機器上該配置文件
位於 /etc/mysql 目錄下. 裏面檢查 [mysqld] 小節下的 server-id,
log_bin 的設置. 以下:
[mysqld]
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
binlog_do_db = test # 須要複製的數據庫(列表)
binlog_ignore_db = mysql # (複製中忽略的數據庫) sql
配置以後從新啓動 MySQL, 方法是 service mysql restart (注意在不一樣的 linux
上不一樣, 咱們的系統是這個命令).
請校驗配置正確, MySQL 可以正確啓動. 若是不能啓動, 請檢查是否配置寫錯或... 數據庫
進入 mysql 命令, 執行 select @@server_id; 或
show global variables like 'server_id'; 查看 server-id 配置是否生效了, 值
是否正確. log_bin 也可相似方式查看. 安全
2. 在主 MySQL 上備份數據. 具體小步驟按照順序執行以下:
2.a) 鎖定整個數據庫使只讀. 使用命令 flush tables with read lock;
2.b) 備份數據庫數據. 方法不少, 可自選. 我選擇用 mysqldump, 如:
mysqldump -h localhost -u root -p dbname > /tmp/dbbackup.sql
2.c) 記錄主服務器當前 log_bin 文件名和偏移量, 目的是在從服務器上使用其
值從該位置開始進行數據的恢復. 使用命令 show master status \G
*************************** 1. row ***************************
File: mysql-bin.000003
Position: 243
Binlog_Do_DB: test
Binlog_Ignore_DB: mysql
1 row in set (0.00 sec)
記錄下 File, Position 兩項. 在配置從服務器時候會用到. 服務器
2.d) 上述操做以後, 恢復寫操做, 使用命令 unlock tables; 網絡
3. 在主 MySQL 中創建用於複製的帳戶, 並受權具備 replication slave 權限.
mysql>GRANT REPLICATION SLAVE ON *.* TO 'slave_001'@'192.168.0.111'
IDENTIFIED BY 'password';
記錄下用戶名和密碼. 命令行
使用這個帳戶進行復制, 其才具備必要且安全的權限. 必定不要用 root 帳戶. 線程
4. 將備份的數據導入到從數據庫. 能夠進入 mysql 命令行, 執行
source /tmp/dbackup.sql; 命令. 別的方法也可自選. rest
5. 配置從服務器的配置文件 my.cnf:
[mysqld]
server-id = 2 # 必定不能和主服務器相同, 也不能和別的從服務器衝突.
log_bin = /var/log/mysql/mysql-bin.log
replicate-do-db = test
網絡上部分文章在這裏配置 master-host, master-user 等, 咱們實驗了致使不能啓動.
配置了以後從新啓動, 並檢查是否配置正確. 方法同步驟1中所述.
6. 在從服務器中 mysql 命令行執行:
mysql>CHANGE MASTER TO
> MASTER_HOST='192.168.0.100', # 主 MySQL 地址
> MASTER_USER='slave_001', # 用於複製的帳戶
> MASTER_PASSWORD='password', # slave_001 的密碼
> MASTER_LOG_FILE='mysql-bin.000003', # 步驟2中記錄的日誌文件名和位置.
> MASTER_LOG_POS=243;
注意: 要檢查 datadir (在咱們機器配置中位於目錄 /var/lib/mysql) 中是否有文件
master.info; 根據某些文檔說必需要刪除該文檔, 才能正確執行 CHANGE MASTER 命令.
爲了保險起見, 建議刪除或更名該文件再執行 CHANGE MASTER 命令.
而後啓動 slave, 使用命令: start slave; 檢查 slave 狀態: show slave status \G
正常狀況下, slave 的兩個線程 slave_io, slave_sql 的 running 狀態是 yes.
此時, 能夠試驗在主服務器上執行更新操做(insert,update等), 而後驗證從服務器上
是否進行了複製.
主從服務器在使用過程當中還可能發生錯誤, 如咱們已經遇到了在主服務器上執行的錯誤 SQL 語句致使 從服務器上 slave_sql 線程暫停堵塞(此時可看到 last_sql_error 信息). 所以要注意監控 slave 的相應狀態, 遇到問題再去檢查是什麼緣由並解決.