mysqlsa.py 為 Python 自動化腳本,通過修改 /etc/my.cnf 並執行授權 SQL,實現 MySQL 主從/雙主同步的一鍵部署。包含模塊:mysqlsa.py(主程序)、mysqldb.py(DB 模塊)、master/slave(參數模板)。
raw_input、MySQLdb)/etc/my.cnf 存在/usr/local/mysql(否則需修改腳本 LD_LIBRARY_PATH)
tar -zxf mysql-master-slave.tar.gz
cd mysql-master-slave
chmod 777 mysqlsa.py
log-bin=/var/log/mysql/mysql-bin
binlog-ignore-db=mysql,test
binlog-do-db=wgdb
log-bin=/var/log/mysql/updatelog
./mysqlsa.py
# 選擇 1) Installation MySQL Master
# 輸入 Slave IP: 192.168.1.4
# 腳本自動:
# - 檢查/創建 /var/log/mysql 目錄權限
# - 向 my.cnf 第 57 行插入 master 配置
# - 創建 replication 用戶授權 Slave IP
service mysqld restart
mysql -u root -p -e "SHOW MASTER STATUS;"
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
./mysqlsa.py
# 選擇 2) Installation MySQL Slave
# 自動寫入 my.cnf 第 57 行
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
反向執行上述步驟:在原 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
*.asDICf.1KD、路徑 /usr/local/mysql 需按實際環境修改pymysql 替代 MySQLdbslave-skip-errors=all 危險,生產環境慎用