MYSQL 的主从配置很简单。环境是ubuntu14.04 64位,mysql是5.5的。
配置主从的步骤
停掉所有数据库写操作。
我是直接停掉所有关联数据库的应用
但对于某些数据库可以加锁 FLUSH TABLES WITH READ LOCK;配置好再解锁 UNLOCK TABLES;
备份数据库,把数据库同步到从库中
修改配置文件
主库
server-id=1 #设置服务器id,注意:如果原来的配置文件中已经有这一行,就不用再添加了。id不要与其他数据库重复就行
log_bin=mysql-bin #启动MySQ二进制日志系统,注意:如果原来的配置文件中已经有这一行,就不用再添加了。
binlog-ignore-db=mysql #不同步mysql系统数据库
在这里没有配置要同步的数据库
从库
server-id=10
log-bin=mysql-bin #启动MySQ二进制日志系统,注意:如果原来的配置文件中已经有这一行,就不用再添加了。
replicate-do-db=uwin_apps #需要同步的数据库名,如果有多个数据库,可重复此参数,每个数据库一行
replicate-ignore-db=mysql #不进行同步mysql系统数据库
重启mysql
在主库执行以下命令
grant replication slave on *.* to 'uwin_apps'@'%' identified by 'uwin_apps123'; 添加从库同步用户
FLUSH PRIVILEGES;
show master status;--记下file和Position
在从库中
stop slave;
change master to master_host='10.0.1.124',master_user='uwin_apps',master_password='uwin_apps123', master_log_file='mysql-bin.000001' ,master_log_pos=68135524;
start slave;
没有报错就OK了
查看同步状态 show slave status;
- Slave_IO_Running 和Slave_SQL_Running的状态都是Yes就是正常的
下面就是监测数据库的同步状态的脚本了
#!/bin/sh
#set -x
#file is slave_repl.sh
#Author by Kevin
#date is 2011-11-13
#mstool="mysql -h 192.168.1.106 -uroot -pw!zl7POg27 -P 3307"
sltool="mysql -uroot -proot"
date=$(date +%y-%m-%d--%H:%M:%S)
declare -a slave_stat
slave_stat=($($sltool -e "show slave status\G"|grep Running |awk '{print $2}'))
echo ${date}
if [ "${slave_stat[0]}" = "Yes" -a "${slave_stat[1]}" = "Yes" ]
then
echo "OK slave is running"
exit 0
else
echo "Critical slave is error"
echo
echo "*********************************************************"
# echo "Now Starting replication with Master Mysql!"
# file=`$mstool -e "show master status\G"|grep "File"|awk '{print $2}'`
# pos=`$mstool -e "show master status\G"|grep "Pos"|awk '{print $2}'`
# $sltool -e "slave stop;change master to master_host='192.168.1.106',master_port=3307,master_user='repl',master_password='w!zl7POg27',master_log_file='$file',master_log_pos=$pos;slave start;"
# sleep 3
# $sltool -e "show slave status\G;"|grep Running
# echo
# echo "Now Replication is Finished!"
# echo
echo "**********************************************************"
sendemail -s smtp.163.com -f songserver@163.com -t song571377@163.com -u hello -m "${date}master to slave find error" -xu songserver@163.com -xp mlrnwoyulhzkqnbu -o tls=auto
exit 2
fi
- 查看同步状态是否正常就是判断 Slave_IO_Running 和Slave_SQL_Running的状态是否都是Yes。
运行这个脚本就可以查看数据库同步状态,如果出问题就给song5@163.com发送邮件。在其中注释的部分是在出现同步错误后自动恢复的。
这个脚本copy于 http://blog.chinaunix.net/uid-7589639-id-3018209.html
写好脚本后,就是让这个脚本定时执行了。
在终端里 sudo vi /etc/crontab
在里面加入
*/1 * * * * root sh /home/songyang/check9.sh
是的,我的那个脚本文件名是 check.9sh 并且在 /home/songyang/路径下
执行后会把输出信息发到你root邮箱里
OK,大功告成。
发送邮件需要先安装sendemail