MySQL单向主从同步实践

一、背景目的

  在生产环境有个mysql数据库,体验有限,开发的时候经常会出现由于数据错误导致的程序问题,而且日志经常写的也不清不楚,但是直接连接生产数据库风险太大,所以我就想把生产环境的数据同步到本地环境过来,然后在本地进行调试

首先百度了一大篇,反正很多,大部分都有些过时了,实践起来不怎么成功,我照着做成功的文章地址:https://blog.csdn.net/qq_26819733/article/details/59557712,而且这篇文章把原理也说的很清楚了

二、操作

  Master数据库配置

  1)、Master数据库配置

      第一步肯定是创建同步数据所要使用的数据库账户了和分配权限了,slave的ip是因为我只想用这个账户在从数据库服务器上登录,其他地方就不允许登录

CREATE USER '{用户名}'@'{slave的IP地址}' IDENTIFIED BY '{密码}';

  分配权限

grant replication slave on *.* to '{上一步创建的用户}'@'{slave的ip地址}' identified by '{密码}';

  2)、数据库配置文件配置(xxx.cnf配置文件)

  

#设置服务器id,为1表示主服务器,
server-id=1                             #设置服务器id,为1表示主服务器,
log_bin=mysql-bin                  #启动MySQ二进制日志系统
binlog_format=mixed
binlog_do_db=lotteryticket      #需要同步的数据库名,如果有多个数据库,可重复此参数,
binlog_ignore_db=mysql         #不同步mysql系统数据库
binlog_ignore_db=information_schema  #不同步information_schema系统数据库


[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4

  都有注释应该不用在详细说明

  这里说一下我遇到的坑,其实主从配置的关键内容只有server-id、log_bin、binlog_format、binlog_do_db、binlog_ignore_db这些配置。我之所以把下面的也贴出来,是因为我开始的时候把主从的配置写到了[mysql]这些下面,

  数据库启动没什么问题,但是在用命令登录的时候会报错。unknown variable server-id,最终换个位置就行了

3)、配置完以后重启一下,OK,主数据库配置就完成了

  登录上Master数据,使用show master status;查看状态

 记住那个file有用,否则会不成功

  Slave数据库配置

1)、数据库配置文件(xxx.cnf配置文件)

  跟Master的配置差不多,主要就是server-id不能写成1就行了

#设置服务器id,为1表示主服务器,
server_id=2
log_bin=mysql-bin
binlog_format=mixed
replicate_do_db=lotteryticket
replicate_ignore_db=mysql
replicate_ignore_db=information_schema

[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4

2)、登录上slave数据库进行配置

  

mysql> stop slave;
mysql> change master to master_host='xx.xx.xx.xx', master_user='root',master_password='123456',
master_log_file='mysql-bin.000001',
master_log_pos=154;(保证是最新的position)
mysql> start slave;

  注意这里的master_log_file需要配置上面查看状态得到的file名字,否则启动的时候Slave_IO_Running参数会是No导致同步不成功

3)、show slave status;查看从数据库状态,看到Slave_IO_Running为YES和Slave_SQL_Running也是YES说明就成功了。很奈斯

原文地址:https://www.cnblogs.com/txb1989/p/12964205.html