注:本次MySQL双机热备(主主互备)是在准备工作已经做好的前提下开始:
在此之前请确认前提工作已做好,前提准备工作包括:
#############################################################################
# 1.安装centos或者其他linux服务器版本(本文基于centos7)。 #
# 2.安装MySQL数据库版本5.3以上(本文基于5.7.13版本)并最好已配好环境变量 #
# (linux任何目录都可以直接使用mysql命令)。 #
# 3.已经关闭防火墙iptables(开放MySQL的3306端口)以及SElinux安全机制) #
# 【目的在于双机能相互ping通,如若能相互ping通,忽略第三步】 #
#############################################################################
步入正题:
Ⅰ 双机热备背景
就是要保持两个数据库的状态自动同步。对任何一个数据库的操作都自动应用到另外一个数据库,始终保持两个数据库数据一致。这样做如果其中一台宕掉了可以切换到另一台。 2. 可以做负载均衡,可以将请求分摊到其中任何一台上。
Ⅱ MySQL前提准备工作
准备两台机器(因为是双机热备)
我的机器是:master(192.168.10.217) slave(192.168.10.224)
【在master(192.168.10.217)slave(192.168.10.224)机器上分别进行以下操作】
【在master(192.168.10.217)slave(192.168.10.224)机器上分别进行以下操作】
【在master(192.168.10.217)slave(192.168.10.224)机器上分别进行以下操作】
①首先用root账号登录MySQL。
mysql -uroot -p密码 回车
有时登录上提示必须修改重置密码才能操作(如若没有提示请忽略下步)。
set password = 'root密码'; 回车。
②分配两个供slave机器复制binary-log的MySQL账户。
本文采用root分配(注:如果没有权限登录到root,请先开启普通账户的所有授权尤其是replication slave权限),下面的操作是一样的:
grant replication slave on *.* to '用户名'@'%' identified by '密码'; 回车
flush privileges; 回车 (刷新权限使刚刚分配的账号生效)
注:(replication slave 是复制二进制日志的权限 其中%表示所有人都可已登录
如果改成第二台服务器地址则可以限制只能slave机器登录比如:‘用户名’@‘192.168.10.224’
,用户名和密码根据自己需求定义。其他不再赘述)
③修改MySQL配置文件(成败在此一举)
【在master(192.168.10.217)机器上修改配置文件】
vim /etc/my.cnf #回车 我的配置文件大约在第70行(:set number)加入以下配置(注意:server-id 已经存在,但是两台机器不能相同)
server-id = 1
log-bin=mysql-bin
binlog-ignore-db= mysql
log-slave-updates
sync_binlog= 1
auto_increment_offset= 1
auto_increment_increment= 2
replicate-do-db= mailgateway
replicate-ignore-db= information_schema,performance_schema
:wq 回车保存退出
重启MySQL服务 /etc/init.d/mysqld restart 回车
【在slave(192.168.10.224)机器上修改配置文件】
vim /etc/my.cnf 回车 我的配置文件大约在第70行(:set number)加入以下配置(注意:server-id 已经存在,但是两台机器不能相同)
server-id = 2
log-bin=mysql-bin
binlog-ignore-db= mysql
log-slave-updates
sync_binlog= 1
auto_increment_offset= 2
auto_increment_increment= 2
replicate-do-db= mailgateway
replicate-ignore-db= information_schema,performance_schema
重启MySQL服务 /etc/init.d/mysqld restart 回车
④检查状态
运行(MySQL登录模式)
show master status; 回车 已经状态记录不再是empty 便是已经配置生效
show slave status;回车 可以看到目前为止slave状态:
lave_IO_Running: Connecting
Slave_SQL_Running: Yes
⑤注意,如果你要同步的数据库还在生产环境,请先进行锁表操作(flush tables read lock;回车)不再进入新的数据,待第一次同步完成后记得解锁(unlock tables;回车)。
⑥最为关键的最后一步:
在master机器(192.168.10.217)上执行:
stop slave;回车 #执行同步前先关闭slave
change master to master_host='192.168.10.224',master_user='sunhong',master_password='sunhong',master_log_file='mysql-bin.000002',master_log_pos=154;
在master机器(192.168.10.217)上执行:
stop slave;回车 #执行同步前先关闭slave
change master to master_host='192.168.10.217',master_user='sunhong',master_password='sunhong',master_log_file='mysql-bin.000002',master_log_pos=154;
【!!!注意!!!】
上面的host user password不解释,是自己创建的。
master_log_file 与 master_log_pos 这个是分别运行 show master status;回车得到的。对应的字段为(File 与 Position);
现在分别运行上面已经停止的slave服务:
start slave;回车;
现在再执行 show slave status\G 回车 查看两台机器从机状态均为:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
OK!大功告成!双机热备已经架构完成。