MYSQL主从热备及双机互备
操作步骤及问题:
-----------------------------------------------------------
一、获取IP,检查网络连接状态
1. ifconfig/ipconfig
测试: 主机A:192.168.3.10 从机B:192.168.3.11
2. ping
二、创建备份数据库: 主从机
CREATE DATABASE `dbtest` CHARACTER SET utf8;
三、创建同步用户及赋权: 测试帐号创建成功
grant all privileges on *.* to mirze@'%' identified by '123456';
flush privileges;
四、主从创建:单向(主机操作,从机同步更新)
1. Master 配置: 修改 my.ini
找到[mysqld],模块下添加内容:
server-id = 1 #主机唯一标识
log-bin= #存放同步日志文件位置:重要,可指定值,确保文件可读写
#测试同步成功后加上
#read-only =0 # 主机读写都可以
#binlog-do-db =testdb # 需要备份数据,多个写多行
#binlog-ignore-db=mysql # 不需要备份的数据库,多个写多行
注意:配置文件修改完毕保存该配置并且删掉 mysql 的 data 目录下除数据库以外的文件。主要是 *.00000* 类似的文件以及 master.info ,为避免出错,一定要先删除。
2. Slave 配置: 修改 my.ini
找到[mysqld],模块下添加内容:
server-id = 2
master-host = 192.168.3.10 #主机IP
master-user = mirze #主机同步用户
master-password = 123456 #主机同步用户密码
master-port = 3306
master-connect-retry = 60 #从服务器发现主服务器断掉,重连时间差(秒)
replicate-do-db = testdb #同步数据库:多个写多行
配置完毕保存后,增加了master.info与relay-log.info等文件。
停止MYSQL服务,删除data目录下除数据库外的所有文件, master.info和relay-log.info两文件必须删除。
注意:master修改my.ini时,master.info和relay-log.info必须删除重启服务。
五、重启Mysql测试同步状态
1. show master status;
记住file 和 position值,在 slave状态检验
2. show slave status\G;
注意:检查参数 Slave_IO_State 、 Slave_IO_Running 、 Slave_SQL_Running
说明:Slave_IO_State 的状态值是由 Slave_IO_Running 的值决定的,如果 Slave_IO_Running 和 Slave_SQL_Running 的值都为 Yes ,并且 Slave_IO_State 的值为 :Waiting for master to send event ,那么说明配置是没问题的可以进行下一步同步尝试了。
六、同步数据测试: 单向
1. Master 使用同步帐号(mirze)登录,创建数据:
user testdb;
create table test(id int);
show tables;
2. Slave 使用同步帐号(mirze)登录,查看数据:
user testdb;
show tables;
七、双机互备配置
1. Master : my.ini 中 [mysqld] 添加:
master-host = 192.168.3.11
master-user = mirze
master-password = 123456
master-port = 3306
master-connect-retry = 60
replicate-do-db = testdb
2. Slave : my.ini 中 [mysqld] 添加:
Log-bin =
可以 down 其中一台机器或者 MySQL 服务器,然后在另外一个 MySQL 服务器上进行插入、修改或者删除等操作,然后再重启另外一台机器,里面数据也随着更新了。
八、问题:
1. 关闭linux防火墙: ping 不通的情况,需检查网络设置和防火墙设置
vim /etc/sysconfig/iptables;
在文件中拷贝设置端口 22 的语句,粘贴在该语句下面,并将 22 修改为 3306 ,即开放 3306 端口:
-A RH –Firewall -1 -INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
保存重启firewall服务.
service iptables restart;
2. IP 变化导致数据不能同步问题
查看IP是否变化,修改配置文件,删除master.info和relay-log.info文件,重启服务.
3. 配置之后在查看 slave 状态时,三个关键参数值不对
Slave_IO_Running:No
#复制没有启动,执行命令 slave start io-thread 尝试启动 io 线程
Slave_SQL_Running:No
#执行命令 slave start sql_thread
执行完后,如果状态值还是不对,检查一下 master 中的 file 和 position 的值和 slave 状态中的 master_log_file 、 master_log_pos 的值分别是否对应。如果不对应 , 执行以下命令修改 slave 的状态值:
stop slave;
change master to master_log_file='mysql-bin.000001', master_log_pos= 106 ;
如其他值也有问题,可在后面累加,以逗号隔开,命令结束时用分号结尾