阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Ubuntu下MySQL主从复制笔记

185次阅读
没有评论

共计 2759 个字符,预计需要花费 7 分钟才能阅读完成。

一:测试环境介绍

主从复制测试环境是 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

Ubuntu 下 MySQL 主从复制笔记

设置好后,使用 show master status; 查询一下状态

Ubuntu 下 MySQL 主从复制笔记

设置从服务器连接的账号,密码等

配置连接用户

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 目录,你的环境可能不是该目录),你配置完成后仍然需要重启slaveMySQL。配置参数如下:
log_bin= mysql-bin
server_id= 110
relay_log=mysql-relay-bin
log_slave_updates=1
read_only=1
server_id是必须的,而且唯一。slave没有必要开启二进制日志,但是在一些情况下,必须设置,例如,如果 slave 为其它 slavemaster,必须设置 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

Ubuntu 下 MySQL 主从复制笔记

 

 三:主库 SQL 测试

主库创建数据库:

Create database copytest;

创建表:

Create table tu (uid bigint primary key);

添加一条数据

Insert into tu (1);

现在我们来看从数据库:

Ubuntu 下 MySQL 主从复制笔记

从图中可以看到,主库的数据,已经复制到了从库。

五:总结问题

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 一样,所以出现了上面的错误.

Ubuntu 下 MySQL 主从复制笔记

因为主从的 utunbu 环境是克隆的,所以出现了这个问题,我们进入 mysql 的 data 目录,修改 auto.cnf 文件,通过 show variables like ‘%datadir%’ 查询出 data 目录。

Ubuntu 下 MySQL 主从复制笔记

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

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-22发表,共计2759字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中