yeyedeyatou 2014-09-26
在线上应用运行的过程中,可能会由于某些原因mysql数据库挂掉了,造成数据丢失或影响线上应用的使用。这时候定时对数据库备份就显得尤为重要。这里主要是介绍主从数据库配置,当主库不能正常使用时,可迅速切换到备库,以保证正常运行。
服务器环境:
主服务器:192.168.200.24 操作系统:centos 数据库版本:5.0.95 master
从服务器:192.168.200.247 操作系统:centos 数据库版本:5.1.73 slave
配置的话最好数据库版本一致。 查看mysql版本:mysql -V
步骤:
1.创建同步账户,让两个mysql可以可以互相访问
在24上进入mysql执行命令: GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.200.247' IDENTIFIED BY '123456' WITH GRANT OPTION; (通过账号root密码123456连接247上的库,权限为所有)
在247上进入mysql执行命令:GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.200.24' IDENTIFIED BY '123456' WITH GRANT OPTION;
执行 flush privileges;(可使以上执行的grant立即生效)
创建完后,就可以正常通过mysql命令连接到对应服务器上的mysql库了。如果连接不上,检查下防火墙是否已关闭。
2.修改两台mysql的配置文件
24上在[mysqld]中添加
log-bin=mysql-bin
server-id=1 必须指定,且不能重复
binlog-ignore-db=mysql 不需要同步的库
binlog-ignore-db=information_schema 不需要同步的库
replicate-do-db=meizi4 需要同步的库,若有多个可写多行
247上在[mysqld]中添加
log_bin = mysql-bin
server-id = 2 必须指定,且不能重复
replicate-do-db =meizi4 需要同步的库,若有多个可写多行
配置完后要重新启动两个mysql数据库
启动方法:service mysqld start 或mysqld_safe &
停止mysql:service mysqld stop
若mysql启动报错,可查看mysql日志,错误日志可在my.cnf中配置log-error,没有配置则在默认安装目录的hostname.err中
3.得到master的状态信息:show master status; 记录下File和Position 的值,4将会用到。File=mysql-bin.000002 Position =98
4.登陆247的mysql,执行命令:change master to master_host='192.168.200.24',master_user='root',master_password='123456',master_port=3307,master_log_file='mysql-bin.000002 ',master_log_pos=98;
5.查看数据库状态
show slave status\G;
察看结果字段Slave_IO_State,一般应该为"Waiting for master to send event";此时Slave_IO_Running和Slave_SQL_Running应该为true,
如果不是,在slave端执行: stop slave; start slave; 重启复制进程。
重启slave的时候出现报错:The server is not configured as slave; fix in config file or with CHANGE MASTER TO
原因:slave的server-id配置有问题 查看 show variables like 'ser%'; 结果显示为0.明明配置的2 显然之前配置的未生效。server-id需配置到[mysqld]下
Replicate_Do_DB为要复制的数据库,和my.cnf配置的相同。