MySQL数据库主从同步设置中主服务器二进制日志无法开启的解决办法

来源:互联网 发布:linux剪辑软件 编辑:程序博客网 时间:2024/05/17 14:27

        最近正在学习使用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;可以看到从服务器的状态,已经开始准备接受数据了。


          至此,主从复制的所有设置都已设置完成。接下来就是测试数据的同步效果了。以上是我解决这个问题的一点想法,如有错误还望各位大神们海涵并指出~~~