一、背景目的
在生产环境有个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说明就成功了。很奈斯