作为从服务器Slave,会用master上的账号登陆到master上,读取master的binlog,写入到自己的中继日志 Relaylog,然后自己的SQL线程会负责读取这个中继日志,并执行一遍。
在考虑双机热备时,需要注意,一般意义上的双机热备都会有一个切换过程,这个切换过程可能是一分钟左右。在切换过程中,服务是有可能短时间中断的。但是,当切换完成后,服务将正常恢复。因此,双机热备不是无缝、不中断的,但它能够保证在出现系统故障时,能够很快恢复正常的服务,业务不致受到影响。而如果没有双机热备,则一旦出现服务器故障,可能会出现几个小时的服务中断,对业务的影响就可能会造成很严重的损失。
5.2.2 配置步骤环境要求:
主数据库(Master)IP:10.254.1.248
备份数据库(Slave)IP:10.254.1.249
备份前保证两个数据库的数据一致
Master端
进入MySQL命令行, 给备份主机赋予复制权限,即备份主机使用用户名backup,密码123456就可以连接到主服务器,backup就是同步账号
grant file,select,replication slave on *.* to backup@10.254.1.249 identified by '123456';
修改配置文件my.cnf[mysqld]:
sevice-id=1
log-bin=mysql-bin --------------打开日志开关,二进制日志文件
max_binlog_size=104857600
binlog_format=mixed--------日志模式row level和statement level的结合
binlog-do-db= aeaiesb -------------在aeaiesb库进行的操作记录二进制日志文件,而不是对aeaiesb库的操作
binlog-ignore-db=mysql --------------------忽略对mysql库的操作,即不记录到日志中
查看master状态
在MySQL命令行:
show master status
mysql> show master status;
+----------------------+-----------+------------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+----------------------+-----------+-------------------+------------------+
| mysql-bin.000013 | 1150 | aeaiesb | mysql |
+-----------------------+----------+------------------+------------------+
1 row in set (0.00 sec)
结果表示现在写日志的文件是mysql-bin.000013,位置是1105,slave端要从这个点开始同步备份aeaiesb
slave端
停掉数据库
service mysql stop
修改配置文件my.cnf,添加如下配置
server-id=2
replicate-same-server-id
master-host=10.254.1.248
master-user=backup
master-password=123456
master-port=3306
master-connect-retry=60 ----重复连接时间间隔
replicate-do-db=aeaiesb---同步master的aeaiesb库
relay-log=miniweb2-relay-bin----设置I/O线程读master的binlog并写入本地的文件名,即为relay-log
重启数据库
service mysql start
在MySQL命令行, 查看slave状态
mysql> show slave status/G;
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: 10.254.1.248
Master_User: backup
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql_bin.000013
Read_Master_Log_Pos: 1105
Relay_Log_File: localhost-relay-bin.000001
Relay_Log_Pos: 4
Relay_Master_Log_File: mysql_bin.000013
Slave_IO_Running: No
Slave_SQL_Running: Yes
Replicate_Do_DB: aeaiesb
这时 Slave_IO_Running的值是No,I/O线程没有启动,是无法进行同步的处理步骤:
1) 在命令行下:
(1)slave stop;
(2)change master to master_host='10.254.1.248',master_user='backup',master_password='123456',master_log_file='mysql-bin.000014',master_log_pos=1150 ;(前面查看的master状态)
(3)slave start;
(4)show slave status;
mysql> show slave status/G; *************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.254.1.248
Master_User: backup
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000013
Read_Master_Log_Pos: 1105
Relay_Log_File: localhost-relay-bin.000002
Relay_Log_Pos: 251
Relay_Master_Log_File: mysql-bin.000013
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB: aeaiesb