MySQL主从同步设置中主服务器二进制日志无法开启的问题
作者:xzsfg6825
最近正在学习使用MySQL数据库,欲实现数据库数据的同步,在设置主服务器和从服务器的过程中出现很多问题。
看了网上很多教程,发现大多教程里面有一个问题,也不知道是我的数据库版本导致的问题还是使用mysql5.6的人都有这个问题。
以下是我的操作:
1、操作条件配置
主服务器:
(1)系统:windows 7
(2)数据库:mysql 5.6
从服务器(虚拟机):
(1)windows 7
(2)数据库:mysql 5.6
2、具体操作(如果有navicat会很简单)
(1)在主服务器上建立需同步的数据库
create database test;
(2)在该数据库下建立两张表:
CREATE TABLE `backup_table` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) CHARACTER SET utf8 NOT NULL, `sex` varchar(2) CHARACTER SET utf8 NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=latin1;
CREATE TABLE `user` ( `User_ID` int(50) NOT NULL, `User_Name` char(100) DEFAULT NULL, PRIMARY KEY (`User_ID`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
(3)在从服务器上建立相同的数据库和表;
(4)由于同步是基于日志的,所以要确保主服务器二进制日志已开启。
在主服务器mysql执行查询:show variables like '%log_bin%'; 可以看到log-bin是关闭的
(5)问题就出在这一步,大多数教程都是提示“在主服务器上mysql安装目录下有个配置文件my.ini,在[mysqld]下更改log-bin=mysql-bin”,但我的mysql5.6的安装根目录下只有my-default.ini,于是我误以为就是在这个文件里面更改,但是更改之后,无论如何重启服务,查询log-bin始终是OFF,于是在找了很多教程之后,发现了mysql的另一个数据存储的路径,我尝试的找到了mysql的另一个保存数据的目录C:\ProgramData\MySQL,找到了my.ini,于是在这个文件里进行了更改:
(6)修改之后,重启服务器,在进行查询show variables like '%log_bin%'; 终于解决了这个烦了我一天的问题:
(7)同理,从服务器的server-id设置成2,且同样要在目录 C:\ProgramData\MySQL中找到my.ini文件打开进行设置 (ProgramData文件夹可能是隐藏的,直接输入地址栏就能找到),后面的设置可直接写在server-id后面,同样是在该目录下的my.ini中
replicate-do-db=test #要同步的数据库 replicate-do-table=test.bakeup_table #要同步的表,改成自己的数据库和表 replicate-do-table=test.user #要同步的第二个表
(8)然后在主服务器数据库上创建一个用于同步数据的用户,使用navicat很简单,用户名和密码自行设置,主机设置成%,然后执行grant replication slave on *.* to 'testuser'@'%';
(9)设置好后,在navicat的命令行中执行 show master status;显示出正确结果,终于那个之前一直是 “ empty set ” 的问题解决了,至此主机上的都设置好了。
3、从数据库中的设置
(1)配置寻找主服务器如下图,然后启动从服务器,输入start slave;即可
CHANGE MASTER TO MASTER_HOST='主服务器ip', MASTER_USER='testuser', #新建的用户 MASTER_PASSWORD='yanwei', #我的用户密码 MASTER_LOG_FILE='mysql-bin.000002', #上图查询出的同步文件 MASTER_LOG_POS=120; #上图查询出的同步点(即:position下的值)
(2)检查配置结果,在从服务器上输入:show slave status;可以看到从服务器的状态,已经开始准备接受数据了。
至此,主从复制的所有设置都已设置完成。接下来就是测试数据的同步效果了。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。