准备两个虚拟机
解决uuid:
生成的uuid复制到auto.cnf中即可
- 各自安装好mysql, 版本必须一致
- 查询mysql的配置 vim /etc/my.cnf
避免复制的虚拟机 导致mysql的serverId一致 例如135为主机 136为从机配置如下
-
配置主服务
- 编辑 /etc/my.cnf
-
log-bin=mysql-bin server-id=1 binlog-do-db=2007javaa binlog_ignore_db=mysql
注意要把此项配置放在my.cnf的[mysqld]下面
- 重启mysql systemctl restart mysql
-
创建一个允许从数据库来访问的用户账号(mysql中操作) #创建账号 create user 'username'@'从机ip' identified by '123456'; #授权 grant all privileges on *.* to 'username'@'从机ip' with grant option; #刷新 FLUSH PRIVILEGES;
create user bw@'192.168.58.136' identified by 'root'; grant all privileges on *.* to 'bw'@'192.168.58.136' with grant option; FLUSH PRIVILEGES; 注意新创建的用户不可以是root 因为root已经存在
-
使用如下命令查看主服务器(mysql中操作)
show master status\G
如果是empty 查看log-bin
show variables like '%log_bin%';
-
可以看到log_bin是OFF.
解决方法:
在mysql 配置文件 /etc/my.cnf中
[mysqld]下添加:
log-bin=mysql-bin
但是我们上面已经配置过这个了,那就是配置的/etc/my.cnf没有生效
#查看是否有设置使用指定目录的my.cnf文件,如果没有则是加载默认文件/etc/my.cnf
ps aux|grep mysql|grep 'my.cnf'
#查看mysql默认使用my.cnf文件目录以及优先级,排在前面的优先级高
mysql --help|grep 'my.cnf'
修改的位置不对,由于是测试环境的mysql,所以是直接使用mysqld去启动MySQL服务的,
而不是使用mysqld_safe脚本去启动的,所以修改参数的时候需要对应好才会生效。
配置要放在[mysqld]下才会生效
生效后查看的结果:
记住file 和 position 下一步操作需要此值
从服务器配置和操作
- 编辑/etc/my.cnf文件,添加如下内容: server-id=2 注意:不可跟主服务器的一样
- 重启从服务器 service mysqld restart
- 如果之前有启动过slave,要先关闭,如果是第一次就忽略。(mysql中操作) stop slave;
-
执行如下代码(mysql中操作) change master to master_host=‘主服务器ip’, master_user=‘刚在主服务器创建的用户名’, master_password=‘刚在主服务器创建的用户密码’, master_port=3306, master_log_file=‘刚查看主服务器下的File值’, master_log_pos=刚查看主服务器下的Position值
change master to master_host='192.168.58.135', master_user='bw', master_password='root', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos=120;
- 执行如下代码(mysql中操作) show slave status\G 能看到如下结果即可
说明成功! 如果有其中一个为NO 都不成功!
- 测试
使用navicat链接主服务器和从服务器
在主服务器中创建数据库和表 从服务器会自动同步数据