一:测试环境介绍
主从复制测试环境是Ubuntu+MySQL主 5.7,master服务器ip是192.168.71.135,slave服务器ip是192.168.71.137,Ubuntu环境是从一台已配置好环境的服务器克隆的。
二:mysql主从配置
1:) master配置
a 在mysql 目录下(/etc/mysql),mysql.cnf文件中添加server-id和Log-bin.主从服务器的server-id不能相同
log-bin=mysql-bin
server-id=100
设置好后,使用show master status;查询一下状态
设置从服务器连接的账号,密码等
配置连接用户
GRANT REPLICATION SLAVE ON *.* to 'mysql账号'@'%' identified by '密码';这里是测试,没有指定从服务器的ip.如需指定ip,执行下面一个指令
GRANT REPLICATION SLAVE ON *.* to 'mysql账号'@'192.168.71.137' identified by '密码';
配置好后记录重启mysql.
2:)配置从数据库
2.1 Slave 的配置与 master 类似(配置文件名称:mysql.cnf,在/etc/mysql目录,你的环境可能不是该目录),你配置完成后仍然需要重启 slave 的 MySQL 。配置参数如下:
log_bin= mysql-bin
server_id= 110
relay_log=mysql-relay-bin
log_slave_updates=1
read_only=1
server_id 是必须的,而且唯一。 slave 没有必要开启二进制日志,但是在一些情况下,必须设置,例如,如果 slave 为其它 slave 的 master ,必须设置 bin_log 。在这里,我们开启了二进制日志,而且显示的命名 ( 默认名称为 hostname ,但是,如果 hostname 改变则会出现问题 ) 。
relay_log 配置中继日志, log_slave_updates 表示 slave 将复制事件写进自己的二进制日志 ( 后面会看到它的用处 ) 。
有些人开启了 slave 的二进制日志,却没有设置 log_slave_updates ,然后查看 slave 的数据是否改变,这是一种错误的配置。所以,尽量使用 read_only ,它防止改变数据 ( 除了特殊的线程 ) 。但是, read_only 并是很实用,特别是那些需要在 slave上创建表的应用。
2.2 配置完成后重新启动 mysql
/etc/init.d/mysql restart
2.3 执行同步 SQL语句
mysql> change master to
master_host=’192.168.71.135’,
master_user=’syncuser’,
master_password=’123456’,
master_log_file=’mysql-bin.000001’, -- 该值来源于主库,执行show master status 后的File字段
master_log_pos=443; -- 该值来源于主库,执行show master status 后的position字段
2.4 查询从库状态
start slave;
show slave status\G
三:主库SQL测试
主库创建数据库:
Create database copytest;
创建表 :
Create table tu (uid bigint primary key);
添加一条数据
Insert into tu (1);
现在我们来看从数据库:
从图中可以看到,主库的数据,已经复制到了从库。
五:总结问题
1:执行同步语句,出错
mysql> change master to
master_host=’192.168.71.135’,
master_user=’syncuser’,
master_password=’123456’,
master_log_file=’mysql-bin.000001’,
master_log_pos=443;
出现如下错误:
Slave is not configured or failed to initialize properly. You must at least set --server-id to enable either a master or a slave. Additional error messages can be found in the MySQL error log.
解决办法:
删除slave的mysql库的表
drop table slave_master_info;
drop table slave_relay_log_info;
drop table slave_worker_info;
drop table innodb_index_stats;
drop table innodb_table_stats;
重新启动slave数据库:/etc/init.d/mysql restart;
2:配置好的,slave执行show slave status\G语句后,slave_io_running: no显示no
slave_io_running: yes才能正常复制,为no时无法复制,可以看到有一个错误,
Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work.
意思是master和slave的uuid重复了,用show variables like '%server_uuid%'查询出uuid,明显两台机子的uuid一样,所以出现了上面的错误.
因为主从的utunbu环境是克隆的,所以出现了这个问题,我们进入mysql的data 目录,修改auto.cnf文件,通过show variables like '%datadir%'查询出data目录。
MySQL主从复制部署 http://www.linuxidc.com/Linux/2017-09/146728.htm
MySQL主从复制技术的简单实现 http://www.linuxidc.com/Linux/2017-11/148534.htm
Ubuntu 16.04下实现MySQL主从复制 http://www.linuxidc.com/Linux/2017-08/146624.htm
MySQL主从复制及遇到问题的解决 http://www.linuxidc.com/Linux/2017-10/147557.htm
本文永久更新链接地址 : http://www.linuxidc.com/Linux/2017-12/149303.htm
注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。