[聚合文章] Ubuntu下MySQL主从复制笔记

MySQL 2017-12-10 18 阅读

一:测试环境介绍

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

注:本文内容来自互联网,旨在为开发者提供分享、交流的平台。如有涉及文章版权等事宜,请你联系站长进行处理。