mysql 多實例 主從複製實戰記錄

本文章: 參考 跟老男孩學linux-web集羣實戰  第九章

  大環境:
    contos:Linux localhost 2.6.32-754.3.5.el6.x86_64 #1 SMP Tue Aug 14 20:46:41 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux
    mysql: mysql-5.5.32           mysql 一機多實例3個 搭建環境:  跟老男孩學linux-web集羣實戰  第九章
    

  1.   環境的準備
      a.  contos上 mysql 一機多實例3個   
  2. 定義主從複製需要的服務器角色
      a.  master 3306、slave1 3307、slave2 3308
  3. 在主庫 master 上操作	
      a. 設置 server-id 值並開啓 binlog 功能, my.cnf 配置文件上
          i. [root@localhost ~]# egrep 'server-id|log-bin' /data/3306/my.cnf        
log-bin = /data/3306/mysql-bin
server-id = 1
b.  登錄mysql 檢查參數更改情況
mysql> show variables like 'server_id';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 1     |
+---------------+-------+
1 row in set (0.01 sec)

mysql> show variables like 'log_bin';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| log_bin       | ON    |
+---------------+-------+
1 row in set (0.00 sec)
c. 在主庫上 建立用於 主從複製的賬號
grant replication slave on *.* to 'rep'@'10.0.0.%' identified by 'oldboy123'
d. 檢測主庫創建的 rep 複製賬號命令和結果如下
e. 實現對主數據庫鎖表只讀
flush table with read lock;
f. 鎖表後,查看主庫的狀態
show master status;
g. 鎖表後,單開一個 ssh ,導出數據庫的所有數據
 mysqldump -uroot -poldboy123 -S /data/3306/mysql.sock  --events -A -B | gzip > /server/backup/mysql_bak.$(date +%F).sql.gz    | 參數有 gzip 不太好用
mysqldump -uroot -poldboy123 -S /data/3306/mysql.sock  --events -A -B  > /server/backup/mysql_bak.$(date +%F).sql    這個ok


記得再次檢查,master 主庫信息狀態
mysql -u root -poldboy123 -S /data/3306/mysql.sock -e "show master status" 
h. 導出數據後,解鎖主庫,恢復可寫狀態
unlock tables;
4.從庫操作
  1.  把主庫導出的 mysql 數據遷移到 從庫
mysql -uroot -poldboy123 -S /data/3308/mysql.sock < mysql_bak.2018-10-13.sql     這個ok 

2.  mysql 從庫鏈接主庫的 配置信息
CHANGE MASTER TO
MASTER_HOST='192.168.190.128',
MASTER_PORT=3306,
MASTER_USER='rep',
MASTER_PASSWORD='oldboy123',
MASTER_LOG_FILE='mysql-bin.000007',
MASTER_LOG_POS=504;
整個配置 mysql 從庫鏈接主庫的信息操作過程如下:
 mysql -uroot -poldboy123 -S /data/3307/mysql.sock << EOF
CHANGE MASTER TO
MASTER_HOST='192.168.190.128',
MASTER_PORT=3306,
MASTER_USER='rep',
MASTER_PASSWORD='oldboy123',
MASTER_LOG_FILE='mysql-bin.000007',
MASTER_LOG_POS=504;
EOF

  3. 啓動從庫同步開關, 並查看複製狀態
mysql -uroot -poldboy123 -S /data/3307/mysql.sock -e "start slave;"
mysql -uroot -poldboy123 -S /data/3307/mysql.sock -e "show slave status\G;"

      主從複製是否成功,最關鍵的爲下面的3個狀態參數
[root@localhost backup]# mysql -uroot -poldboy123 -S /data/3307/mysql.sock -e "show slave status\G" | egrep "Slave_IO_Running| Slave_SQL_Running|Seconds_Behind_Master"
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
        Seconds_Behind_Master: 0


參數解釋:
  1. Slave_IO_Running: Yes,   這個是I/O 線程的狀態, I/O 線程負責從 從庫到主庫讀取 binlog 日誌,並寫入從庫的 中繼日誌, 狀態爲yes, 標識 I/O 線程工作正常
  2. Slave_SQL_Running: Yes,這個是 sql 線程的狀態, sql線程負責讀取 中繼日誌(relay-log) 中的數據 並轉換爲sql語句應用到從數據庫中, 狀態爲yes 表示 I/O 線程工作正常
  3. Seconds_Behind_Master: 0, 這個是複製過程中 從庫比主庫 延遲的秒數, 這個參數很重要, 但企業裏更精準的判斷判斷主從延遲的方法爲:  在賬戶庫寫時間戳,然後從庫讀取時間戳, 和當前數據庫時間進行比較,從而判斷是否延遲

有管 show slave status 結果的說明,查看 mysql 手冊
--------------------------------------------------------------------------------

5. 測試主從複製結果
在主庫上寫入數據,然後觀察從庫的數據狀態
[root@localhost backup]# mysql -uroot -poldboy123 -S /data/3306/mysql.sock -e "create database oldboy;"
[root@localhost backup]# mysql -uroot -poldboy123 -S /data/3307/mysql.sock -e "show databases;"         
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| oldboy             |
| performance_schema |
| test               |
+--------------------+

[root@localhost backup]# mysql -uroot -poldboy123 -S /data/3306/mysql.sock -e "drop database oldboy;" 
[root@localhost backup]# mysql -uroot -poldboy123 -S /data/3307/mysql.sock -e "show databases;"        
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+

6. 結果:
 數據是同步的, mysql 主從同步 搞定

查看 master 狀態
[root@localhost backup]# mysql -uroot -poldboy123 -S /data/3306/mysql.sock -e "show master status;"
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000007 |      676 |              |                  |
+------------------+----------+--------------+------------------+

 

😊 再次折騰一下午,結果還是滿意的

之前 2臺mac主機上, 搞過一次mysql主從, 理解不是很深刻, 鏈接: http://www.imshuai.cn/blog/213

今天在搞一遍,比之前深刻多了 :)
    2018-10-13

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章