最近学习了一下mysql主从服务配置,中间踩过了一些坑,所以在这里做下总结,方便以后查阅。
因为我使用的是虚拟机,所以这里的配置是基于2个Ubuntu 16.04 64位系统进行配置的。
主机IP为:192.168.199.199 从机IP为:192.168.199.217
具体步骤如下:
- 主机需要开启二进制文件记录,配置独立的id编号,并且修改为任何其他的主机都可以访问。
-- 在终端输入这个命令:vi /etc/mysql/mysql.conf.d/mysqld.cnf
,因为这个文件默认是只读的,你需要事先修该成可读写的,具体指令为:chmod 644 /etc/mysql/mysql.conf.d/mysqld.cnf
,然后把这个文件里面的server-id和log_bin两行开启,然后把 bind-address注释掉,以便其他的主机都可以访问,然后保存这个文件,最后切记要把这个文件的权限改成和原来的权限一样的,不然这个配置文件不生效。然后重启下mysql:sudo service mysql restart
-- 从机配置:
打开配置文件的方式和主机是一样的,然后只需要修改下server-id为2即可,然后也需要修改文件权限,重启mysql。 - 将主服务的数据备份到从服务器。
在主机终端输入此命令:mysqldump -uroot -pcz --all-databases --lock-all-tables > ~/Desktop/master_db.sql
,用于把主机的所有数据库备份到桌面。 - 远程拷贝,把主机备份的数据拷贝到从机的桌面。
scp Desktop/master_db.sql python@192.168.199.217:/home/python/Desktop
- 在从机完成数据的恢复,在从机终端输入该指令,这个密码需要的是主机的密码,这个指令需要手动敲,不然恢复不成功。
mysql –uroot –pcz < ~/Desktop/master_db.sql
- 登录主机服务, 创建一个账户, 让所有的从机都能够使用这个账户登录到主机, 完成数据的复制。
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' identified by 'slave';
输入该指令后需要刷新权限:FLUSH PRIVILEGES;
- 记录主机的基本信息:
SHOW MASTER STATUS;
-- 注意:如果mysql配置文件的权限没有恢复成原来的,会有警告:mysql: [Warning] World-writable config file '/etc/mysql/mysql.conf.d/mysqld.cnf' is ignored.
表示把这个文件被忽略了,也就是你修改的配置文件并没有生效。
正常输入此指令会显示日志文件的名字和位置,记录下来,等下会用到。 - 在从服务器中设置 需要隶属于哪一个主机
change master to master_host='192.168.199.199', master_user='slave', master_password='slave',master_log_file='mysql-bin.000003', master_log_pos=741;
注意:如果已经开启了主从复制, 会报错,此时需要停止主从复制:stop slave;
然后再开启主从复制:start slave;
- 如何验证主从配置已经成功,在从机终端输入:
show slave status\G;
,如果IO Running和sql Running同时都是yes就表示主从配置成功。 - 最后测试下主从同步。
在主机mysql里面新建一个数据库,然后在从机mysql查看是否新增了一个数据库。