最近加入了同窗的技术分享小组,4我的分两组,半月进行一次技术分享,如今一块儿搞Mysql我被分到讲解Mysql日志方面,上周已经讲完了,不过他们老是以为对于日志这块了解不透彻,以为不过关...因而你们自觉强制在加一轮分享做为对mysql这段时间的学习总结,结合实践来进行分享,以前分享的日志的分类和原理很是理论,我本身也不满意,因而花了一天把二进制日志的数据恢复和主从复制搞了一下,因而这篇文章产生了,纸上得来总觉浅,绝知此事要躬行,这句话忽然从我脑海中冒出来了。mysql
我是将Mac OS本机的Mysql做为master,虚拟机的Mysql做为slave,首先修改master和slave的my.cnf数据库配置文件。内容以下:我这里配置的是同步master的test数据库。
git
master的my.cnfgithub
[mysqld] # 主从备份相关配置 server-id = 1 # 服务器 id 号,不要和其余服务器重复 log-bin=mysql-bin # 开启二进制日志 log_bin_index = mysql-bin.index # 索引二进制日志的文件名 sync_binlog = 1 # 设为1就是把MySql每次发生的修改和事件的日志即时同步到硬盘上 binlog_format = Row # 复制模式 Statement, Row, mixed skip_slave_start = 1 # 防止从服务器在崩溃后自动开启,以给你足够的时间修复。 max_binlog_size = 200M # 指定二进制日志的大小 # 须要同步的二进制数据库名 binlog-do-db = test # 不一样步的二进制数据库名,若是不设置能够将其注释掉 binlog-ignore-db = information_schema binlog-ignore-db = mysql
slave的my.cnfsql
# 主从备份相关配置 - 从服务器 server-id = 2 # 服务器 id 号,不要和其余服务器重复 read_only = 1 # 让从服务器只读,能够防止有人误从服务器插入数据,致使主从数据不一致。 log-bin=mysql-bin # 开启二进制日志 log_bin_index = mysql-bin.index # 索引二进制日志的文件名 log_slave_updates = 1 relay_log = mysql-relay-bin # 中继日志 relay_log_index = mysql-relay-bin.index skip_slave_start = 1 # 防止从服务器在崩溃后自动开启,以给你足够的时间修复。 max_binlog_size = 200M # 指定二进制日志的大小 # 如下配置是为了方便之后,从库切换为主库 # 须要同步的二进制数据库名 binlog-do-db = test # 不一样步的二进制数据库名,若是不设置能够将其注释掉 binlog-ignore-db = information_schema binlog-ignore-db = mysql
配置文件修改完,须要将mysql服务重启,使得配置生效;而后在master上使用root用户建立同步帐户并受权slave;而后查看master状态,此时不要再进行master的操做,配置slave的跟踪master日志的位置;最后检查主从备份是否成功。具体实现过程以下:数据库
我这里建立的用户容许任何主机使用正确密码登录,也能够指定ip地址登录,至关于在master使用repl帐号密码也能够登录进行操做。服务器
// 建立同步帐户repl并受权 create user 'repl'@'%' identified by 'password'; grant all privileges on *.* to 'repl'@'%';
查看mster状态,我进行了两次mysql服务重启,因此二进制日志已经到mysql-bin.000003,咱们以后在master上操做会开始从mysql-bin.000003开始记录。ide
show master status\G
配置slave跟踪master日志的位置,本地ip地址是192.168.1.90,slave的ip地址是192.168.92.141,配置过程不须要用到slave的ip,repl是咱们建立的同步帐户,接下来是密码,二进制日志文件,和二进制日志中查看到的positon 5616。截图显示Position已经达到了6467,我应该是截图的时候搞得太慢了,数据库内部发生了一点变化,说明即便咱们不操做数据库,二进制日志也会记录数据库的变化,固然这不影响咱们的主从复制,由于Position提早了,就更不影响了。学习
CHANGE MASTER TO MASTER_HOST='192.168.1.90', MASTER_USER='repl', MASTER_PASSWORD='password', MASTER_LOG_FILE='mysq-bin.000003', MASTER_LOG_POS=5616;
接下来开启slave,检查slave主从备份的状态,这里Slave_IO_State状态是Wait for master to send event说明主从备份配置成功了,正在等待master数据库发生变化,若是主从复制失败,查看状态会显示出错误信息,能够根据状况进行调试。spa
// 开启slave start slave; // 查看状态 SHOW SLAVE STATUS\G
咱们接下来在test数据库的user表添加一行数据user4:调试
看下从库发生了同步,查看数据以下:
看到从库同步增长了一行数据,说明咱们利用二进制日志binlog实现了主从备份成功了,最后提醒一下,个人数据库版本都是mysql8,0+的版本,若是版本不一致配置会遇到不少麻烦,最好是统一,不统一也不符合咱们的开发规范,建立同步帐户时,mysql8.0+版本的sql语句也不同,若是你的版本在mysql8.0如下,能够直接参考其余人的教程,可是大体步骤都是相同的,这篇文章着重于实现二进制日志的主从复制,目的为了更好的了解mysql日志,本人技术有限,若有错误,欢迎批评指正,谢谢。