前言:我的主数据库是安装在Centos6.1上的,从数据库是安装在window上的;
第一步:centos安装mysql:
1、参考文档:https://jingyan.baidu.com/article/9f63fb91728616c8400f0eed.html
https://blog.youkuaiyun.com/xlgen157387/article/details/49964557
注:既然是配合主从库,那么肯定2台机器之间必须是可以ping通的而且mysql的端口3306是对外开放的;
查看3306端口,发现时对外开放的:
因为我的Master库是安装在Centos上的,所以为了测试方便,我直接关闭了Centos的防火墙(只有root用户才有权限关闭防火墙):
关闭防火墙成功:
为了进一步验证连Slavel是否能上Master,我window上用Navicat尝试连接,这样确保2台机器之间是可以互通的,这里可能会曝出一个错误java.sql.SQLException: Access denied for user ‘root’@’localhost’ (using password:YES):
解决办法是进入MySQL命令台执行下面2条命令
grant all privileges on *.* to root@"%" identified by "your password"; --your password替换成你的root用户的密码
flush privileges;
再一次连接,这次可以连接上了:
配置Master:
第二步:修改Master主库的mysql配置文件,etc/my.cnf文件:
my-bin就是bin-log文件的名字,可以根据各自情况自定义文件名;
server-id=2用于标识唯一的数据库,这里为设置2;
binlog-ignore-db:表示同步的时候ignore的数据库;
binlog-do-db:指定需要同步的数据库;
修改完成后重启mysql:service mysqld reatsrt;
赋予从库权限帐号,允许用户在主库上读取日志,赋予110.45.xx.17也就是Slave机器有File权限,只赋予Slave机器有File权限还不行,还要给它REPLICATION SLAVE的权限才可以。
在Master数据库下执行命令:
GRANT FILE ON *.* TO 'root'@'10.45.xx.17' IDENTIFIED BY 'root';--这里的root用户是作为同步的时候使用的用户
GRANT REPLICATION SLAVE ON *.* TO 'root'@'10.45.xx.17' IDENTIFIED BY 'root';
然后再一次重启mysql:
重启完成后执行show master status;命令
这里的 File 、Position 是在配置Salve的时候要使用到的,Binlog_Do_DB表示要同步的数据库,Binlog_Ignore_DB 表示Ignore的数据库,这些都是在配置的时候进行指定的。
另外:如果执行这个步骤始终为Empty set(0.00 sec),那说明前面的my.cnf没配置对。
配置Slave:
因为是window系统,所以修改my.ini
新增下面的配置:
Window重启mysql服务:
从库执行如下命令:
stop slave;
change master to master_host='192.168.xxx.129',master_user='root',master_password='root',master_log_file='mysql-bin.000002', master_log_pos=283;
start slave;
在这里指定Master的信息(ip、用户名、密码),master_log_file是在配置Master的时候的File选项, master_log_pos是在配置Master的Position 选项,这里要进行对应。
show slave status查看配置信息:
从输出信息可以看出已经配置好了;
测试1:
Master新建一张表:
Slave端查看是否已经同步:
测试2:
Master插入一条数据:
Slave查询是否同步了该条数据:
同步成功:mysql主从同步数据库搭建成功;