发布时间:2020-03-14 15:11:03来源:阅读:
一直觉得配置mysql的主从挺费时间,现在花了一点时间写了个全自动配置mysql主从的shell脚本。如有什么错误,欢迎提出。
1、在使用之前需要在主服务器上编辑/etc/my.cnf文件,在[mysqld]的下面加入下面代码:
log-bin=mysql-bin server-id=1 innodb_flush_log_at_trx_commit=1 sync_binlog=1 binlog-do-db=centos binlog_ignore_db=mysql
server-id=1中的1可以任定义,只要是唯一的并且比从服务器的server-id小就行。
binlog-do-db=centos是表示binlog只记录centos数据库的日志,即只同步centos。
binlog_ignore_db=mysql表示忽略备份mysql。
不加binlog-do-db和binlog_ignore_db,那就表示备份全部数据库。
2、在从服务器编辑配置文件my.cnf,在[mysqld]下面加入:
server-id=2
2可以自己定义,只要保证唯一的并且比主的server-id大就行。
3、脚本分为两个,一个是配置mysql主服务器的shell脚本,另一个是远程连接mysql从服务器的exp脚本。
bash shell脚本:master.sh
#!/bin/bash export mysqlbinpath="/usr/bin" #mysql路径 #variables for master export master_mysql_root_passwd="root" #mysql主数据库的root密码 export replication_user="copydb" #用于复制的mysql用户 export replication_passwd="123456" #mysql用户copydb的密码 export replication_db="centos" #需要同步的数据库名 export master_ip="8.8.8.8" #mysql主服务器IP #variables for slave export slave_mysql_root_passwd="123456" #mysql从数据库的root密码 export slave_ip="8.8.4.4" #从服务器IP地址 export slave_ssh_root_passwd="123456" #mysql从数据库的ssh的root密码 #create replication user { ${mysqlbinpath}/mysql -uroot -p${master_mysql_root_passwd} <<EOF CREATE USER '$replication_user'@'$slave_ip' IDENTIFIED BY '$replication_passwd'; GRANT REPLICATION SLAVE ON *.* TO '$replication_user'@'$slave_ip' IDENTIFIED BY '$replication_passwd'; FLUSH TABLES WITH READ LOCK; select sleep(10); EOF } & #export the database sql data. ${mysqlbinpath}/mysqldump -uroot -p${master_mysql_root_passwd} ${replication_db} > ${replication_db}.sql #get the master status info. export status=`${mysqlbinpath}/mysql -uroot -p${master_mysql_root_passwd} -e"show master statusG"` export binlogname=`echo "$status" | grep "File" | awk '{print $2}'` export position=`echo "$status" | grep "Position" | awk '{print $2}'` #create database on slave server. export createdb="${mysqlbinpath}/mysql -uroot -p${slave_mysql_root_passwd} -e'drop database if exists ${replication_db};create database ${replication_db};'" #import database sql data on slave server. export importsql="${mysqlbinpath}/mysql -uroot -p${slave_mysql_root_passwd} ${replication_db} < /root/${replication_db}.sql" #deploy the slave mysql server. export change_master="${mysqlbinpath}/mysql -uroot -p${slave_mysql_root_passwd} -e'stop slave;CHANGE MASTER TO MASTER_HOST="${master_ip}",MASTER_USER="${replication_user}",MASTER_PASSWORD="${replication_passwd}",MASTER_PORT=3306,MASTER_LOG_FILE="${binlogname}",MASTER_LOG_POS=${position},MASTER_CONNECT_RETRY=10;start slave;select sleep(3);show slave statusG'" yum -y install expect ./slave.exp
expect脚本:slave.exp
#!/usr/bin/expect -f spawn scp $env(replication_db).sql root@$env(slave_ip):/root expect { "*assword" {set timeout 300; send "$env(slave_ssh_root_passwd) ";} "yes/no" {send "yes "; exp_continue;} } expect eof spawn ssh root@$env(slave_ip) "$env(createdb);$env(importsql);$env(change_master)" expect { "*assword" {set timeout 300; send "$env(slave_ssh_root_passwd) ";} "yes/no" {send "yes "; exp_continue;} } expect eof
使用方法:
上传master.sh和slave.exp两个文件到mysql主服务器,执行master.sh脚本开始配置mysql主从。最后执行完输出的从服务器状态中的 Slave_IO_Running和Slave_SQL_Running都为Yes的话,则说明主从已经配置成功,否则失败。
使用注意:
master.sh文件中的23行有一个select sleep(10)语句,10是指锁表10秒,这个时间根据导出sql数据所需时间定,如果导出sql数据超过10秒,则需要调大锁表时间,否则可能会有用户写入数据而使导致主从配置失败。
下一篇:如何找回淘宝中的购买记录
自动投票软件(投票刷票神器) v3.8 免费版
52KB
2寸照片生成器(标准照片自动调整软件)v1.0 免费版
453KB
AI全自动剪辑软件下载
162.5M
AutoHotkey(热键脚本语言编辑工具) v1.1.32.00 中文版
3.1M
EXCEL全自动检索录入
2.11 MB
Yuntel电话自动拨号软件 v5.2.6.0官方版
51.5M
后台挂尔雅浏览器(自动刷课浏览器) 2021 免费版
88.7MB
天猫砍红包软件(自动抢红包软件) V1.0 绿色版
577.75 KB
心蓝IP自动更换器下载
5.5M
文件自动分类下载
288.11K
神奇照片自动打印软件下载
14.4M
系统之家一键重装系统(系统自动安装工具)12.5.48.1830 最新版
28.4M
绿点鼠标自动点击器下载
2.34MB
HeidiSQL下载
10.1M
b站录播机下载
129.1M
h3c模拟器下载
59.1M
mc喊麦软件下载
8M
天翼宽带客户端
15.59 MB
2020-06-24
同时管理多台服务器的expect脚本
使用nginx ngx_http_referer_module模块配置防盗链
Cortana
开机提示“由于启动计算机时出现了页面配置问题…”如何处理?
如何使用联想人脸识别(VeriFace)功能
Windows XP下如何进行系统还原
外接音箱或耳机和内置喇叭同时发声
Linux dump备份文件系统命令详解
iptables配置实例说明