背景:所负责的自动化持续交付平台业务量逐渐增长,以防不测,需要搭建备份系统,经过多方考量;
选择采取mysql的主从系统进行备份;互为主从(即所谓双主);
PS:
三种备份方式:
a、脚本通过mysqldump备份 ----------- 数据量少时可以采取
b、第三方工具备份 ----------- 大多数工具都是windows端的。一旦出现问题,恢复起来步骤稍多(本人比较懒,能自动化的最好都自动化)
c、mysql的主从同步机制 ------------ 推荐,实时增量热备,切换时可以直接启用DB。
下列为搭建记录,以备查:
一、mysql主主同步配置流程
1、两个服务器建立同步账号
GRANT REPLICATION SLAVE,FILE ON *.* TO ‘replication‘@‘192.168.%.%‘ IDENTIFIED BY ‘123456‘;
FLUSH PRIVILEGES;
--------------- 用户名 ‘replication‘ 密码 ‘123456‘ 权限 SLAVE,FILE
2、修改服务器配置文件 ------------------ 根据服务器变量名的不同,以及部署位置的不同,具体的变量赋值需要调整
主服务器A:
#replicate confi
server-id = 14550
log-bin=mysql-bin
log-bin-index=master-bin.index
binlog_format="ROW"
innodb_file_per_table=1
replicate_do_db =jats
relay_log =/var/lib/mysql/mysql-relay-bin.log
主服务器B:
server-id = 14542
replicate_do_db =jats
relay_log =/var/log/mysql/mysql-relay-bin.log
slave-net-timeout=60
3、从服务器A的jats 使用 load或mysqldump导入到B服务器;
4、重启A/B服务器
5、从服务器启动同步进程
stop slave;
reset slave;
change master to master_host=‘192.168.145.45‘,master_port=3306,master_user=‘replication‘,master_password=‘123456‘,master_log_file=‘mysql-bin.000002‘,master_log_pos=6663;
------------------其中的 master_log_file/master_log_pos 都是主服务器的log文件(主服务器使用 show master status可以看到)
b、start slave;
6、至此主服务器jats的任何数据变化都会被同步到从服务器
7、此时双方服务器的所有操作都会互相同步;
二、mysql同步方式和原理
http://www.cnblogs.com/carterzhang/articles/4633540.html
1、同步方式:
模式:主从(1主多从)
复制方式:同步复制、单向同步、异步复制
2、同步原理
原理:
a、一个服务器充当主服务,而一个或多个服务器充当从服务器。
b、主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。
c、从服务器连接主服务器时,它通知主服务器此从服务器在日志中读取的最后一次成功更新的位置。
d、从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。 ------------- 此过程一直持续,知道关闭同步功能;
步流程:(接到主服务器通知更新后)(主要是通过执行和结果返回分离来实现):
a、主服务器开启1个线程m用于将二进制日志内容发送给从服务器(即s1线程执行语句后的结果)
b、从服务器开启2个进程,
1) 线程s1:创建一个I/O线程,以连接主服务器并让它发送记录在其二进制日志中的语句。
2) 线程s2:从relaylog中读取更新
c、主服务器将二进制文件更新推送给从服务器
e、从服务器将更新写入同步日志(relay log)
f、从服务器mysql主进程从relay log读取更新并执行;
二、日常维护注意事项
1、binary log 以及 relay log的大小控制
三、关键参数配置含义
log_bin 二进制文件位置
relay_log 中继文件位置
relay_log_index中级日志索引
replicate_do_db 只同步某个DB
slave-net-timeout 同步超时设置(秒)
server-id 服务器ID,不同服务器不重复
四、同步相关命令
stop slave ------------停止同步线程
reset slave ------------- 清空同步配置
change master to master_host=‘192.168.145.45‘,master_port=3306,master_user=‘replication‘,master_password=‘123456‘,master_log_file=‘mysql-bin.000002‘,master_log_pos=6663; -------- 设置主服务器
------------------其中的 master_log_file/master_log_pos 都是主服务器的log文件(主服务器使用 show master status可以看到)
start slave -------------- 开启同步线程
show master status ----------- 作为主服务器时,查看配置
show slave status ----------- 作为从服务器时查看同步配置