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