/ 前言 /
该Shell脚本适用于一主一从, 但是如果你需要布置为一主多从或者多主多从只需要简单修改即可, 修改方式在脚本备注中
当前脚本暂无自动安装MySQL的流程, 我会尽快完善, 也可以看我之前的博文安装MySQLCentos7安装MySQL5.7图文解析 (附MySQL安装包官网地址及MySQL5.7安装手册)
如需了解MySQL主从搭建的流程及原理可以看我的博文MySQL主从搭建图文解析及原理
/ 自动化Shell脚本 /
#!/bin/bash
function check() {
echo "check is running"
check_results=$(yum list installed | grep mysql)
echo "command(rpm -qa) results are: $check_results"
if [[ -n $check_results ]]; then
echo "开始MySQL主从配置"
else
echo "请先安装MySQL"
fi
}
LOG_FILE
POSITION
# 配置master
function master() {
service ${SERVER_ID} stop
sed -i '/mysqld/a\log-bin=master-bin' ${CFG_PATH}
sed -i '/mysqld/a\server-id=1' ${CFG_PATH}
service ${SERVER_ID} start
# 获取Master-Server中的logfile和position
MASTER_INFO=`mysql -uroot -pMyNewPass4! -e"show master status\G"`
LOG_FILE=`echo "${MASTER_INFO}" | grep "File" | awk '{print $2}'`
POSITION=`echo "${MASTER_INFO}" | grep "Position" | awk '{print $2}'`
echo "Master logfile : " ${LOG_FILE}
echo "Master position : " ${POSITION}
mysql -uroot -p${MASTER_PASSWORD} <<eof
DELETE FROM mysql.user WHERE User='${REPLICATION_NAME}';
CREATE USER '${REPLICATION_NAME}'@'${SLAVE_IP}' IDENTIFIED BY '${REPLICATION_PASSWORD}';
GRANT REPLICATION SLAVE ON *.* TO '${REPLICATION_NAME}'@'${SLAVE_IP}';
eof
}
# 配置slave
# 如需配置一主多从只需将当前slave函数复制一份更改一SLAVE_IP即可
function slave() {
echo "即将开启ssh通道连接Slave-Server"
ssh -Tq ${SLAVE_IP} <<sshEOF
service ${SERVER_ID} stop
sed -i '/mysqld/a\server-id=2' ${CFG_PATH}
service ${SERVER_ID} start
mysql -uroot -p${SLAVE_PASSWORD} <<mysqlEof
stop slave;
CHANGE MASTER TO MASTER_HOST='${MASTER_IP}', MASTER_USER='${REPLICATION_NAME}', MASTER_PASSWORD='${REPLICATION_PASSWORD}', MASTER_LOG_FILE='${LOG_FILE}', MASTER_LOG_POS=${POSITION};
start slave;
mysqlEof
sshEOF
}
# 检测slave是否启动
function check_is_running() {
IS_RUNNING=$(ssh -Tq ${SLAVE_IP} <<sshEof
mysql -uroot -p${SLAVE_PASSWORD} -e "show slave status\G" 2>/dev/null |grep "Running:"|wc -l
sshEof
)
if [ ${IS_RUNNING} -eq 2 ]; then
echo "MySQL主从搭建成功!"
else
echo "MySQL主从搭建失败"
fi
}
check
read -p "请输入MySQL Server的进程ID, 如mysqld : " SERVER_ID
echo "SERVER_ID : " ${SERVER_ID}
read -p "请输入Master-Server的IP地址 : " MASTER_IP
echo "MASTER_IP : " ${MASTER_IP}
read -p "请输入SLAVE-Server的IP地址: " SLAVE_IP
echo "SLAVE_IP : " ${SLAVE_IP}
read -p "请输入Master-Server的密码 : " MASTER_PASSWORD
echo "MASTER_PASSWORD : " ${MASTER_PASSWORD}
read -p "请输入SLAVE-Server的密码 : " SLAVE_PASSWORD
echo "SLAVE_PASSWORD : " ${SLAVE_PASSWORD}
read -p "请输入当前MySQL-Server的配置文件路径,如/etc/my.cnf : " CFG_PATH
echo "MySQL主从复制需要创建独立账户, 请输入以下信息"
read -p "主从复制账户用户名, 如replication :" REPLICATION_NAME
echo "MySQL5.7后账户密码需要符合策略 : 数字、小写字母、大写字母 、特殊字符、长度至少8位"
read -p "主从复制账户密码, 如 :MasterRePass4!" REPLICATION_PASSWORD
master
slave
check_is_running