Mysql高可用(主备部署)
主从备份的原理:
主从同步过程中主服务器有一个工作线程I/O dump thread,从服务器有两个工作线程I/O thread和SQL thread。
1.从库的IO线程向主库的主进程发送请求,主库验证从库,交给主库IO线程负责数据传输;
2.主库IO线程对比从库发送过来的master.info里的信息,将binlog文件信息,偏移量和binlog文件名等发送给从库
3.从库接收到信息后,将binlog信息保存到relay-bin中,同时更新master.info的偏移量和binlog文件名
4.从库的SQL线程不断的读取relay-bin的信息,同时将读到的偏移量和文件名写道relay-log.info文件,binlog信息写进自己的数据库,一次同步操作完成。
5.完成上次同步后,从库IO线程不断的向主库IO线程要binlog信息
6.从库如果也要做主库,也要打开log_bin 和log-slave-update参数
主从部署必要条件:
1.主库开启binlog日志(设置log-bin参数)
2.主从server-id不同
3.从库服务器能连通主库
前提:两个服务器数据库版本配置必须一样,初始化一样。防火墙关闭。
环境:
master:192.168.100.01 service-id:01
slave:192.168.100.02 service-id:02
同步账号:axtu
同步密码:axtu123
请先检查防火墙是否关闭,没有关闭的话,请关闭防火墙。
查看防火墙状态:service iptables status
关闭防护墙:service iptables stop
开启防火墙:service iptables start
主从配置开始:
一、主:192.168.100.01步骤:
1.配置同步账号
mysql>grant replication slave on *.* to 'axtu'@192.168.100.02 identified by 'axtu123';
mysql>flush privileges;
mysql>exit;
2.修改/etc/my.cnf添加
service-id=01 #主数据库id为1,不能相同
log-bin=mysql-bin #开启二进制日志,并指定文件目录和文件名前缀
binlog-format=mixed #bin-log日志文件格式,设置为MIXED可以防止主键重复
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
relay-log=relay-bin #记录中继日志
relay-log-index=relay-bin-index
3.重启mysql服务
service mysqld restart
4.进入mysql,查看master的状态信息,记录file和position的值,在后面的slave配置中会用到
mysql>show master status;
注:File:是当前记录的日志;
Position:日志中记录的位置;
二、从:192.168.100.02步骤:
1.修改/etc/my.cnf添加
service-id=02 #主数据库id为1,不能相同
binlog-format=mixed #bin-log日志文件格式,设置为MIXED可以防止主键重复
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
2.启动slave数据库
service mysqld restart
3.从服务器开启同步:
mysql>change master to
master_host='192.168.100.01', #主服务器IP
master_user='axtu',
master_password='axtu123',
master_log_file='mysql-bin.000019',
master_log_pos=2020109;
启动slave
mysql>start slave;
三、检查状态
1.检查master状态
mysql>show processlist\G;
*************************** 1. row ***************************
Id: 157
User: sync
Host:
db: NULL
Command: Binlog Dump
State: Master has sent all binlog to slave; waiting forbinlog to be updated
看到上面的Command: Binlog Dump说明配置成功!
2.检查slave状态
mysql>show slave status \G
*************************** 2. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.0.01
Master_User: axtu
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000019
Read_Master_Log_Pos: 2020109
Relay_Log_File: mysqld-relay-bin.000004
Relay_Log_Pos: 1260
Relay_Master_Log_File: mysql-bin.000019
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Slave_IO_Running和Slave_SQL_Running两个值为YES基本上成功了