MySQL的复制
Posted restart-zjc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL的复制相关的知识,希望对你有一定的参考价值。
mysql复制
复制比较常见的用途是:数据分享、负载均衡、备份、高可用和故障切换以及MySQL升级测试等。
MySQL支持两种复制方式,基于行的复制和基于语句的复制。
1、基于语句的复制发生问题容易定位,但是使用触发器或者存储过程时容易出现错误;
2、基于行的复制几乎没有该复制模式无法处理的场景,但是出现问题时人难认为的查找问题点。
这两种方式都是通过在主库上记录二进制日志,在备库重放日志的方式来实现异步的数据复制。
MySQL能够在两种模式之间动态切换,默认情况是基于语句的复制,无法正确复制时就切换成基于行复制。
复制有三个步骤:
1、在主库上把数据更改记录记录到二进制日志(Binary Log)中;
2、备库将主库上的二进制日志复制到自己的中继日志(Relay Log)中;
3、备库读取中继日志中的事件,将其重放到备库数据之上。
配置复制
1、在每台服务器上创建复制账号;
主库:grant replication savle,replication client on *.* to [email protected]‘192.168.0.%‘ identified by ‘password‘;
监控和管理复制账号需要用到replication client权限,用一个账号更方便。
2、配置主库和备库(配置完成均需重启)
主库my.cnf文件
log_bin = 绝对路径/mysql-bin
server_id = 10 #(唯一的服务器ID)
推荐的复制配置
sync_binlog = 1 #MySQL每次提交事务前会将二进制日志同步到磁盘,服务器崩溃时不丢失事件。
如果主库使用innodb,强烈建议设置:均为MySQL5.0及新版本默认设置
innodb_flush_logs_at_trx_commit #刷新日志写入
innodb_support_xa = 1 #
innodb_safe_binlog
可以使用 show master status; 查询主库上的二进制文件是否创建
备库my.cnf文件
log_bin = mysql_bin #二进制文件命名
server_id = 2 #备库服务器ID
relay_log = 绝对路径/mysql-relay-bin #指定中继日志的位置和命名
log_slave_updates = 1 #允许备库将重放的事件,也记录到自己的二进制日志中,方便备库成为其他服务器的主库
read_only = 1 #设置只读形式,禁止没有超级管理员权限的线程修改数据
skip_slave_start #阻止备库在崩溃后自动启动复制
sync_master_info = 1
sync_relay_log = 1
sync_relay_log_info = 1 #将主库连接设置和中继日志同步到磁盘
relay_log_purge # 延迟大时,重放完成后会删除执行过的中继日志
relay_log_space_limit # 延迟非常严重时,中继日志大小超过此值,线程停止,等待释放空间
expire_logs_days # 日志清理策略
3、启动复制
登录备库复制账号
执行以下命令:change master to master_host=‘server1‘, #假设主库是服务器server1
master_user=‘rep1‘,
master_password=‘password‘,
master_log_file=‘mysql-bin.000001‘,
master_log_pos=0; #要从日志的开头读起
可以使用 show slave status;查询复制是否正确执行
start slave; #开始复制
show prosslist 查看线程列表
--实验MySQL复制,Giuseppe Maxia的沙箱脚本(http://mysqlsandbox.net)
--能够帮助你从一个之前下载的安装包中一次性安装。通过如下命令:
-- $ ./set_replication.pl /path/to/mysql-tarball.tar.gz
克隆备库的方法
1、冷备份 --缺点是需要关闭主库
2、热备份 --如果仅使用MyISAM表,可在主库运行时使用mysqlhotcopy或rsync来复制数据
3、使用mysqldump --如果只包含InnoDB表,
4、使用快照或备份
5、使用Percona Xtrbackup
6、使用另外的备库
以上是关于MySQL的复制的主要内容,如果未能解决你的问题,请参考以下文章