首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 數據庫知識 >  >> MySQL 資料庫 >> MySQL 綜合教學

Python 腳本自動化部署 MySQL 主從/雙主同步:mysqlsa.py 使用詳解

     編輯:MySQL 綜合教學

工具簡介

mysqlsa.py 為 Python 自動化腳本,通過修改 /etc/my.cnf 並執行授權 SQL,實現 MySQL 主從/雙主同步的一鍵部署。包含模塊:mysqlsa.py(主程序)、mysqldb.py(DB 模塊)、master/slave(參數模板)。

環境要求

  • Python 2.7(腳本用 raw_input、MySQLdb)
  • MySQL 已安裝並啟動,/etc/my.cnf 存在
  • 安裝路徑為 /usr/local/mysql(否則需修改腳本 LD_LIBRARY_PATH)

部署步驟

1. 解壓並授權


tar -zxf mysql-master-slave.tar.gz
cd mysql-master-slave
chmod 777 mysqlsa.py

2. 配置 Master 參數 (master 文件)


log-bin=/var/log/mysql/mysql-bin
binlog-ignore-db=mysql,test
binlog-do-db=wgdb
log-bin=/var/log/mysql/updatelog

3. 執行 Master 部署


./mysqlsa.py
# 選擇 1) Installation MySQL Master
# 輸入 Slave IP: 192.168.1.4
# 腳本自動:
#   - 檢查/創建 /var/log/mysql 目錄權限
#   - 向 my.cnf 第 57 行插入 master 配置
#   - 創建 replication 用戶授權 Slave IP

4. 重啟 Master 驗證


service mysqld restart
mysql -u root -p -e "SHOW MASTER STATUS;"

5. 配置 Slave 參數 (slave 文件)


master-host = 192.168.1.3
master-user = replication
master-password = *.asDICf.1KD
master-port = 3306
master-connect-retry = 60
replicate-ignore-db = mysql,test
replicate-do-db = wgdb
relay-log=/var/log/mysql/slave-relay-bin
slave-skip-errors=all

6. 執行 Slave 部署


./mysqlsa.py
# 選擇 2) Installation MySQL Slave
# 自動寫入 my.cnf 第 57 行

7. 重啟 Slave 並同步坐標


service mysqld restart

# Master 獲取坐標
mysql -u root -p -e "STOP SLAVE; SHOW MASTER STATUS;"
# 記錄 File: updatelog.000001, Position: 106

# Slave 設置坐標並啟動
mysql -u root -p -e "
STOP SLAVE;
CHANGE MASTER TO MASTER_LOG_FILE='updatelog.000001', MASTER_LOG_POS=106;
START SLAVE;
SHOW SLAVE STATUS \G;
"
# 確認 Slave_IO_Running=Yes, Slave_SQL_Running=Yes

8. 雙主同步實現

反向執行上述步驟:在原 Slave 執行 Master 部署,原 Master 執行 Slave 部署,互為主從。

腳本核心邏輯解析


class msa:
    def sql(self):      # 創建 replication 用戶授權
    def mk(self):       # 創建日誌目錄 /var/log/mysql
    def master(self):   # 讀取 master 模板插入 my.cnf 第 57 行
    def slave(self):    # 讀取 slave 模板插入 my.cnf 第 57 行
    def re(self):       # 正則替換 server-id、註釋舊 log-bin

注意事項與改進建議

  • 硬編碼問題:第 57 行、密碼 *.asDICf.1KD、路徑 /usr/local/mysql 需按實際環境修改
  • Python 2 依賴:建議移植至 Python 3,使用 pymysql 替代 MySQLdb
  • 無冪等性:重複執行會重複插入配置行,建議先檢查關鍵字存在性
  • 安全性:明文密碼、slave-skip-errors=all 危險,生產環境慎用
  • GTID 模式:現代部署建議使用 GTID,腳本需適配

生產環境替代方案

  • Ansible Playbook:冪等、版本控制、角色化
  • Orchestrator / MHA:高可用、自動故障轉移
  • MySQL Shell / InnoDB Cluster:原生集群方案
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved