mysql主从 切换_发个mysql主从切换的脚本

#!/bin/bash

LANG=zh_CN.UTF-8;

mysql1="/usr/local/mysql5-1/bin/mysql -uroot -p111111";

mysql2="/usr/local/mysql5-2/bin/mysql -uroot -p111111";

mysql3="/usr/local/mysql5-2/bin/mysql -uroot -p111111";

cat << README

==================================================================================================================

操作步骤:

1、会询问你想要切换哪个slave为下一个master,可以输入1(mysql5-1)  2(mysql5-2)  3(mysql5-2)

2、根据你的输入,会连接到该服务器,然后show processlist;检查是否已经同步日志完毕。如果同步完毕,输入y继续

3、停掉该mysql的slave进程。之后reset master,成为主库。

4、询问你接下来的slave是谁,还是输入1、2、3,会有与之前的master的判断

5、还会连接到接下来成为master的库里,然后给slave授权。都这为止,master迁移完毕。

6、在slave上检查日志是否同步完毕,然后stop slave,之后change master to新的master,最后start slave。

7、在slave上show slave status\G;看看进程跑没跑着

-------------------------------------

注意事项:

1、不涉及迁回原来的主库哦。其实步骤一样

2、都弄完了,最好在主库上建个测试库,测测

==================================================================================================================

README

LOG=/home/log

now_master=`cat ${LOG}`

echo -e "\033[1m\E[31;40m现在的主库是${now_master},挂了,悲剧啊...\033[0m";

###  1

echo -e "\033[1m\E[32;40m开始执行操作步骤1\033[0m";

echo "-----------------------------------------------"

read -p "哥们,你想让谁成为主库 [1|2|3] " MASTER

case ${MASTER} in

1) m_con=${mysql1};;

2) m_con=${mysql2};;

3) m_con=${mysql3};;

*) echo "好好看说明去!!" && exit 1;;

esac

echo ""

### 2

echo -e "\033[1m\E[32;40m开始执行操作步骤2\033[0m";

echo "----------------------------------------------"

${m_con}<< SHOW

show processlist;

SHOW

read -p "哥们,日志都同步好了吧 [yes|no]" LOG_Y

case ${LOG_Y} in

yes|y) echo "好的,我们继续";;

*) echo "没事,等会再看看" && exit 1;;

esac

### 3

echo -e "\033[1m\E[32;40m开始执行操作步骤3\033[0m";

echo -e "\033[1m\E[33;40m从这开始,就不可逆了,注意看提示\033[0m";

echo "---------------------------------------------"

${m_con}<< STOP_SLAVE

stop slave;

reset master;

STOP_SLAVE

### 4

echo -e "\033[1m\E[32;40m开始执行操作步骤4\033[0m";

echo "--------------------------------------------"

echo "接下来,你的主库会是${MASTER},也可以做从哦,只要你愿意"

unset SLAVE_

until [[ ${SLAVE_} == 1 || ${SLAVE_} == 2 || ${SLAVE_} == 3 ]]; do

read -p "现在,你需要告诉我谁会是接下来的从库[1|2|3]" SLAVE_

echo ""

done

case ${SLAVE_} in

1)      s_con=${mysql1};;

2)      s_con=${mysql2};;

3)      s_con=${mysql3};;

esac

### 5

echo -e "\033[1m\E[32;40m开始执行操作步骤5\033[0m";

echo "--------------------------------------------"

case ${SLAVE_} in

1)

${m_con}<< GRANT_SLAVE

grant replication slave,reload,super on *.* to slave@'192.168.1.3' identified by 'slave';

GRANT_SLAVE

;;

2)

${m_con}<< GRANT_SLAVE

grant replication slave,reload,super on *.* to slave@'192.168.1.3' identified by 'slave';

GRANT_SLAVE

;;

3)

${m_con}<< GRANT_SLAVE

grant replication slave,reload,super on *.* to slave@'192.168.1.3' identified by 'slave';

GRANT_SLAVE

;;

esac

### 6

echo -e "\033[1m\E[32;40m开始执行操作步骤6\033[0m";

echo "--------------------------------------------";

${s_con} << SHOW_SLAVE

show processlist;

SHOW_SLAVE

read -p "日志都同步完了吧?[yes|no]" SLAVE_LOG_

case ${SLAVE_LOG_} in

yes|y) echo "好的,我们继续";;

*) echo "悲剧了,接下来的步骤手动执行吧,呵呵" && exit 1;;

esac

case ${MASTER} in

1)

${s_con} << STOP_SLAVE2

stop slave;

change master to master_host='192.168.1.3',master_user='slave',master_password='slave',master_port=3306;

start slave;

STOP_SLAVE2

;;

2)

${s_con} << STOP_SLAVE2

stop slave;

change master to master_host='192.168.1.3',master_user='slave',master_password='slave',master_port=3307;

start slave;

STOP_SLAVE2

;;

3)

${s_con} << STOP_SLAVE2

stop slave;

change master to master_host='192.168.1.3',master_user='slave',master_password='slave',master_port=3307;

start slave;

STOP_SLAVE2

;;

esac

### 7

echo -e "\033[1m\E[32;40m开始执行操作步骤7\033[0m";

echo -e "----------------------------------------";

echo "好的,现在我们来检查一下";

sleep 2;

${s_con} << CHECK_STATUS

show slave status\G;

CHECK_STATUS

echo ""

echo "bye"

echo ${MASTER} > log;

阅读(1496) | 评论(0) | 转发(0) |

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 好的,我可以帮助您写一个MySQL主从脚本。 首先,您需要在主数据库和从数据库上配置MySQL,以便在它们之间进行同步。接下来是一个简单的脚本示例: ``` # 在主数据库上执行 # 配置主数据库以允许从数据库同步 # 在MySQL控制台中 GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'%' IDENTIFIED BY 'password'; FLUSH PRIVILEGES; # 获取主数据库当前状态 SHOW MASTER STATUS; # 记录下File和Position值,您将在从数据库上使用它们 # 在从数据库上执行 # 配置从数据库以连接到主数据库并开始同步 CHANGE MASTER TO MASTER_HOST='<主数据库IP地址>', MASTER_USER='replication_user', MASTER_PASSWORD='password', MASTER_LOG_FILE='<File值>', MASTER_LOG_POS='<Position值>'; START SLAVE; # 检查同步状态 SHOW SLAVE STATUS\G; ``` 请注意,您需要将`<主数据库IP地址>`替换为您的主数据库的实际IP地址,并将`<File值>`和`<Position值>`替换为在主数据库上执行`SHOW MASTER STATUS`命令时获得的值。 希望这个脚本对您有所帮助。 ### 回答2: MySQL主从复制是MySQL数据库的一种高可用性和扩展性解决方案之一。主从脚本用于设置和管理MySQL主从复制的配置。以下是一个简单的MySQL主从脚本示例: ```shell #!/bin/bash # 设置主数据库的配置 MASTER_IP="主数据库IP" MASTER_PORT="主数据库端口" MASTER_USER="主数据库用户名" MASTER_PASSWORD="主数据库密码" MASTER_LOG_FILE="主数据库的二进制日志文件" MASTER_LOG_POS="主数据库的二进制日志位置" # 设置从数据库的配置 SLAVE_IP="从数据库IP" SLAVE_PORT="从数据库端口" SLAVE_USER="从数据库用户名" SLAVE_PASSWORD="从数据库密码" SLAVE_DATA_DIR="从数据库数据目录" # 停止从数据库服务 echo "停止从数据库服务..." mysqladmin -u $SLAVE_USER -p$SLAVE_PASSWORD -h $SLAVE_IP -P $SLAVE_PORT shutdown # 清空从数据库数据目录 echo "清空从数据库数据目录..." rm -rf $SLAVE_DATA_DIR/* # 配置从数据库 echo "配置从数据库..." echo " [mysqld] server-id=2 log-bin=mysql-bin relay-log=relay-bin relay-log-index=slave-relay-bin.index replicate-ignore-db=mysql replicate-ignore-db=test replicate-ignore-table=mysql.user replicate-ignore-table=mysql.db replicate-ignore-table=mysql.tables_priv replicate-ignore-table=mysql.columns_priv replicate-do-db=test master-host=$MASTER_IP master-port=$MASTER_PORT master-user=$MASTER_USER master-password=$MASTER_PASSWORD master-log-file=$MASTER_LOG_FILE master-log-pos=$MASTER_LOG_POS " > /etc/my.cnf.d/slave.cnf # 启动从数据库服务 echo "启动从数据库服务..." mysqld_safe --defaults-file=/etc/my.cnf.d/slave.cnf --datadir=$SLAVE_DATA_DIR & # 启动主从复制 echo "启动主从复制..." mysql -u $MASTER_USER -p$MASTER_PASSWORD -h $MASTER_IP -P $MASTER_PORT -e "CHANGE MASTER TO MASTER_HOST='$SLAVE_IP', MASTER_USER='$SLAVE_USER', MASTER_PASSWORD='$SLAVE_PASSWORD', MASTER_PORT=$SLAVE_PORT, MASTER_LOG_FILE='$MASTER_LOG_FILE', MASTER_LOG_POS=$MASTER_LOG_POS" mysql -u $SLAVE_USER -p$SLAVE_PASSWORD -h $SLAVE_IP -P $SLAVE_PORT -e "START SLAVE" echo "MySQL主从脚本执行完毕!" ``` 这个脚本基本上是一个shell脚本,它使用一些MySQL命令和配置选项来设置和管理主从复制。你需要替换脚本中的一些变量值,例如主从数据库的IP地址、端口、用户名、密码等。脚本的核心部分是配置从数据库的my.cnf文件,并启动主从数据库服务,然后通过在主数据库上执行一些命令来开始主从复制。 请注意,这只是一个简单的示例脚本,实际使用中可能还需要处理一些其他的情况和错误处理。此外,具体的配置选项和命令可能因MySQL版本的不同而略有不同。因此,在使用这个脚本之前,请根据自己的实际情况和MySQL版本进行必要的修改和测试。 ### 回答3: 当你需要设置MySQL主从复制时,你需要编写一段脚本来配置主数据库和从数据库。下面是一个简单的MySQL主从脚本的示例: ``` #!/bin/bash # MySQL主从脚本 # 设置主数据库的配置信息 MASTER_HOST="主数据库的IP地址" MASTER_USER="主数据库的用户名" MASTER_PASSWORD="主数据库的密码" # 设置从数据库的配置信息 SLAVE_HOST="从数据库的IP地址" SLAVE_USER="从数据库的用户名" SLAVE_PASSWORD="从数据库的密码" # 配置主数据库 mysql -h $MASTER_HOST -u $MASTER_USER -p$MASTER_PASSWORD <<EOF # 创建用于复制的账户 CREATE USER '$SLAVE_USER'@'$SLAVE_HOST' IDENTIFIED BY '$SLAVE_PASSWORD'; GRANT REPLICATION SLAVE ON *.* TO '$SLAVE_USER'@'$SLAVE_HOST'; # 获取主数据库的二进制日志信息 FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS; UNLOCK TABLES; EOF # 获取主数据库的二进制日志信息 MASTER_LOG_FILE=$(mysql -h $MASTER_HOST -u $MASTER_USER -p$MASTER_PASSWORD -e "SHOW MASTER STATUS\G" | awk '/File:/ {print $2}') MASTER_LOG_POS=$(mysql -h $MASTER_HOST -u $MASTER_USER -p$MASTER_PASSWORD -e "SHOW MASTER STATUS\G" | awk '/Position:/ {print $2}') # 配置从数据库 mysql -h $SLAVE_HOST -u $SLAVE_USER -p$SLAVE_PASSWORD <<EOF # 配置从数据库连接主数据库 CHANGE MASTER TO MASTER_HOST='$MASTER_HOST', MASTER_USER='$SLAVE_USER', MASTER_PASSWORD='$SLAVE_PASSWORD', MASTER_LOG_FILE='$MASTER_LOG_FILE', MASTER_LOG_POS=$MASTER_LOG_POS; # 启动从数据库复制 START SLAVE; EOF echo "MySQL主从复制已成功设置" ``` 请注意,你需要将脚本中的主数据库的配置信息和从数据库的配置信息替换为实际的值。在脚本中,我们首先配置了主数据库,然后获取了主数据库的二进制日志文件名和位置。接下来,我们使用这些信息配置从数据库,并启动从数据库的复制进程。 此脚本只是一个简单的示例,实际情况可能会应用不同的参数和配置。请确保在使用此脚本之前,你已经正确安装和配置了MySQL数据库,并使用适当的权限运行脚本

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值