#!/bin/bash#The script is used for master-slave configuration.#Date 2021-02-21master_ip=192.168.32.1slave_ip=192.168.32.2mysql="/usr/local/mysql/bin/mysql -uroot -ppassword"my_cnf=/etc/my.cnfmaster_dir=/tmp/mysql_slavepass="hSlneoT03j"#检测命令是否执行成功check_ok() {if [ $? -ne 0 ];then        echo "$1 command is error."        exit 1fi}#检测文件是否存在file_exist() {    d=`date +%F-%T`    if [ -f $1 ];then        mv $1 $1_$d    fi}#判断是否含有serve-id配置项,无则添加if ! grep '^server-id' $my_cnf;then        sed -i '/^\[mysqld\]$/a\server-id = 1001' $my_cnffi#判断是否含有log-bin配置项,无则添加if ! grep '^log-bin.*=.*' $my_cnf;then    sed -i '/^\[mysqld\]$/a\log-bin = maria_bin' $my_cnffi#判断是否含有binlog-ignore-db配置项,无则添加if ! grep '^binlog-ignore-db'  $my_cnf;thensed -i '/^log-bin.*/a\binlog-ignore-db = mysql' $my_cnffi#重启mysql服务systemctl restart mysql#检测是否重启成功check_ok "restart mysql"#EOF赋值mysql从库账号密码$mysql << EOF    grant replication slave on *.* to 'repl'@$slave_ip identified by '$pass';    flush tables with read lock;EOF#判断是否有该存放目录[ -d $master_dir ] || mkdir -p $master_dir#将master两个参数File和Position存放至master.log$mysql -e "show master status" > $master_dir/master.logfile=`tail -1 $master_dir/master.log |awk '{ print $1}'`pos=`tail -1 $master_dir/master.log |awk '{print $2}'`#判断文件是否存在file_exist $master_dir/slave.sha='EOF'#定义变量#从库shell脚本cat > $master_dir/slave.sh <<EOF#!/bin/bashcheck_ok() {if [ $? -ne 0 ];then        echo "$1 command is error."        exit 1fi}#判断my.cnf文件是否包含server-id配置项,无则添加if ! grep '^server-id' /etc/my.cnf;then    sed -i '/\[mysqld\]$/a\server-id = 1002' /etc/my.cnffi#重启服务systemctl restart mysqlcheck_ok "slave mysql restart"$mysql <<EOF        stop slave;        change master to master_host="$master_ip",master_user='repl',master_password="$pass",        master_log_file="$file",master_log_pos=$pos;        start slave;$a#内嵌不能双EOF,用变量代替EOF#检测文件是否存在file_exist $master_dir/rs_slave.expect#内嵌expect交互脚本将slave.sh传输至从库cat > $master_dir/rs_slave.expect <<EOF#!/usr/bin/expectset passwd "password"spawn rsync -a $master_dir/slave.sh root@$slave_ip:/tmp/slave.shexpect {        "yes/no" { send "yes\r"}        "password:"{ send "\$passwd\r"}}expect eofEOF#rs_slave.expect文件给予执行权限chmod +x $master_dir/rs_slave.expect$master_dir/rs_slave.expectcheck_ok "rysnc"#检测文件是否存在file_exist $master_dir/exe.expect#内嵌expect交互脚本执行命令cat > $master_dir/exe.expect <<EOF#!/usr/bin/expectset password "password"spawn ssh root@$slave_ipexpect {        "yes/no"{ send "yes\r"}        "password:"{ send "\$password\r" }}expect "]*"send "/bin/bash /tmp/slave.sh\r"expect "]*"send "exit\r"EOF#exe.expect文件给予执行权限chmod +x $master_dir/exe.expect$master_dir/exe.expectcheck_ok "exe.expect excute“#主库解除锁表$mysql -e "unlock tables"
©著作权归作者所有:来自51CTO博客作者Margotchen的原创作品,谢绝转载,否则将追究法律责任

更多相关文章

  1. Linux发行版的系统目录名称命名规则及用途
  2. 软链接与硬链接的区别
  3. 文件的元数据信息查看及修改文件时间戳信息
  4. 用查找替换命令删除文件中行首的空白字符
  5. php数据类型与检测
  6. 不重启JVM,替换掉已经加载的类,偷天换日?
  7. Mac同名文件夹合并的坑
  8. linunx知识汇总二
  9. Git 删除 .gitignore 生成之前上传的文件

随机推荐

  1. android全平台编译ffmpeg以及x264与fdk-a
  2. Android中的基本组件
  3. Amazon 的平板能否威胁 Google
  4. Android开发者指南(1) —— Android Debu
  5. windows和linux下android sdk通用
  6. Android 性能优化之使用MAT分析内存泄露
  7. 【Android】学习笔记(9)——SQLite简单使
  8. 2012版辅助开发工具包(ADT)新功能特性介绍
  9. Mac下用Charles实现Android(安卓)http和h
  10. Android 内存优化