MySQL(Percona Server) 5.6.15
主库:192.168.2.21
从库:192.168.2.22

例如我们同步的数据库为:test。 如果需要同步多个数据库下面会有说明。

MySQL 主从复制原理

1. master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events,可以通过show binlog events进行查看);
2. slave将master的binary log events拷贝到它的中继日志(relay log);
3. slave重做中继日志中的事件,将改变反映它自己的数据。

主库(192.168.2.21):

主库开放 3306 端口

# /sbin/iptables -I INPUT -s 192.168.2.0/24 -p tcp --dport 3306 -j ACCEPT

# service iptables save
 

查看开放的端口:

# service iptables status

# iptables -L -n
 

授权同步账户

mysql> GRANT REPLICATION SLAVE ON *.* TO rep@'192.168.2.22' IDENTIFIED BY '123';
mysql> flush privileges;
 

授权格式为:GRANT REPLICATION SLAVE ON *.* TO username@'ipaddress' IDENTIFIED BY 'password'

现在可以在 192.168.2.22 从库上测试是否可以访问:

# /usr/local/mysql/bin/mysql -h192.168.2.21 -urep -p123
 

配置主库 my.cnf

# vi /etc/my.cnf

[mysqld]
log-bin=mysql-bin #开启 MYSQL 二进制日志
server-id=1 #主库服务器 ID,注意服务器 ID 不能重复
binlog-do-db=test #需要做主从备份的数据库名,如果复制多个数据库,重复设置这个选项即可
expire-logs-days=7 #只保留 7 天的二进制日志,以防磁盘被日志占满
binlog_format=MIXED #设置 binlog 的格式为 MIXED

binlog 的三种格式 STATEMENTROWMIXED,详见 MySQL Binlog ROW 和 STATEMENT 选择

可以通过 show variables like 'binlog_format'; 查看。

保存,重启 MySQL

# service mysql restart

拷贝主库需要同步的数据到从库

进入 mysql 终端 /usr/local/mysql/bin/mysql -uroot -p

设置主库成只读状态

mysql> use test;
mysql> FLUSH TABLES WITH READ LOCK;

重置 binlog 日志

mysql> RESET MASTER;

查看运行状态

mysql> SHOW MASTER STATUS\G;
******************* 1. row *******************
File: mysql-bin.000001
Position: 120
Binlog_Do_DB: test
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)

此处需记录 FilePosition 两个值,下面从库的 CHANGE MASTER TO 命令中需要用到这两个值。

接下来切换到从库服务器,导出主库中需要同步的数据,并导入到从库:

# /usr/local/mysql/bin/mysqldump -h192.168.2.21 -urep -p test > dumptest.db
# /usr/local/mysql/bin/mysql -uroot -p test < dumptest.db

再回到主库服务器解锁主库数据库只读状态

mysql> UNLOCK TABLES;

从库(192.168.2.22):

配置从库 my.cnf

# vi /etc/my.cnf

[mysqld]
server-id=2 #从库服务器 ID,注意服务器 ID 不能重复
replicate-do-db=test #需要做复制的数据库名,如果复制多个数据库,重复设置这个选项即可
slave-skip-errors=1032,1062,126,1114,1146,1048,1396 #自动跳过的错误代码,以防复制出错被中断

如果数据库中有不需要同步的表可以添加 replicate-ignore-table=table_name,... 配置项,自动跳过这些表。

保存,重启 MySQL

# service mysql restart

指定主库

进入 MySQL 终端:

mysql> CHANGE MASTER TO
MASTER_HOST='192.168.2.21',
MASTER_USER='rep',
MASTER_PASSWORD='123',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=120;

启动从库连接

mysql> start slave;

查看从库状态

mysql> SHOW SLAVE STATUS\G;
......
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
......

两个 Yes 成功。

测试

现在可以在主库中插入/更新数据,添加表等操作,看从库是否可以同步相应的数据。

问题

在最后使用 SHOW SLAVE STATUS\G; 查看 slave 运行状态时,有一个错误:

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.

server uuid 是从 MySQL 5.6 开始添加进来的, 由于我偷了个懒,从库是直接在 VirtualBox 中 Clone 的主库,所以 /var/lib/mysql/auto.cnf 文件中的 server-uuid 的值是一样的。 随便改一个值,但是值的格式不能变,不与群组中的其他 server-uuid 重复即可。

改完之后,重启 mysql:

# service mysql restart

再次使用 SHOW SLAVE STATUS\G; 查看状态正常。

附两个小命令:

mysql> SHOW SLAVE HOSTS;  #需在 master 中执行,查看 slave 列表,包括相应的 server-uuid 值

mysql> show variables like 'server_uuid';  #查看本机的 server-uuid 值

Good Luck!

MySQL(Percona Server) 5.6 主从复制的更多相关文章

  1. MySQL Percona server 5.5 安装审计插件

    近期,公司要求对MySQL 数据库上操作进行审计:通过了解MySQL 官方企业版(付费版)本中集成了audit_log审计插件,但是社区开源版本中并不包含该插件,也没提供下载.进一步了解 MariaD ...

  2. MySQL Study之--Percona Server版本号

    MySQL Study之--Percona Server版本号 1.简单介绍      Percona 为 MySQL 数据库server进行了改进.在功能和性能上较 MySQL 有着非常显著的提升. ...

  3. Linux 下 YUM 安装 Percona Server 5.6

    Percona Server 是 MySQL 的衍生版,专注于 Linux/BSD 下 MySQL 数据库服务器的改进, 在功能和性能上较 MySQL 有着显著的提升. Percona Server ...

  4. MySQL社区版升级到Percona Server

    出于磁盘空间的考虑,在调研以后把磁盘空间紧张的库的引擎改为tokudb,(在改为tokudb引擎之前是innodb引擎,已经压缩过,但空间还是紧张)关于tokudb的优势各位自行查阅相关资料.要启用t ...

  5. mysql 5.7/percona server/mariadb 10.2安装与服务器参数优化

    建议使用percona server linux generic版,从https://www.percona.com/downloads/Percona-Server-LATEST/下载,现在不在推荐 ...

  6. MySQL 系列(四)主从复制、备份恢复方案生产环境实战

    第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 第三篇:MySQL 系列(三)你不知道的 视图.触发器.存储过程.函数 ...

  7. percona server 二进制安装下编译tpcc-mysql的坑

    出于习惯,percona server的部署都是通过二进制包自动化安装,结果遇到一个硕大无比的坑,编译TPCC-MySQL时出现警告 10:49:36 root@DB-Master:~/tpcc-my ...

  8. Percona Server 5.6.33-79.0 发布

    Percona Server 5.6.33-79.0 发布了,该版本基于 MySQL 5.6.33,包含了所有的 bug 修复,是Percona Server 5.6 系列中的正式版本.该版本主要是修 ...

  9. Percona Server 5.6.13-61.0 首个 GA 版本发布

    Percona Server 5.6 的首个 GA 版本发布了,版本号是 5.6.13-61.0 ,该版本基于 MySQL 5.6.13 改进内容包括: New Features: Percona S ...

随机推荐

  1. 实用框架(iframe)代码

    <iframe src="http://www.baidu.com" marginwidth="0" marginheight="0" ...

  2. PF_INET 和 AF_INET 的区别

    在写网络程序的时候,建立TCP socket: sock = socket(PF_INET, SOCK_STREAM, 0); 然后再绑定本地地址或连接远程地址时需要初始化sockaddr_in结构, ...

  3. C和指针 第三章 链接属性 extern、internal、none

    三种链接属性 组成一个程序有多个源文件,如果相同的标识符出现在多个源文件中,那么标识符的链接属性决定如何处理在不同文件中出现的标识符. 链接属性有三种: external:外部 多个源文件中的相同标识 ...

  4. Asp.Net Core--基于角色的授权

    翻译如下: 当创建身份时,它可以属于一个或多个角色,例如Tracy可以属于管理员和用户角色,而Scott可以仅属于用户角色. 如何创建和管理这些角色取决于授权过程的后备存储. 角色通过ClaimsPr ...

  5. JS 做的鼠标放大镜(初级)

    这今天我们学习鼠标的各种事件,我给大家分享一下鼠标放大镜的效果. 希望有兴趣的朋友可以一块交流. <!DOCTYPE html><html> <head> < ...

  6. 周末娱乐一下--------恶搞windows小脚本

    下面这是个循环DOS命令,使用了C中的goto语句 echo命令式输出命令 set命令是设置命令 var是变量,初始为0 :continue是一个用于goto的标示. %var%输出变量名,%var% ...

  7. 【Docker】Docker主机为什么ip nets 查不到网络空间

    创建Docker容器后本来应该有新的命名空间(如果有独立网络的话),那么可以通过 ip netns 命令查看到命名空间,但是实际上却看不到. 查过资料才发现,ip netns 只能查看到 /var/r ...

  8. mysql datatime 设置默认值为CURRENT_TIMESTAMP报错`Invalid default value`

    环境: Ubuntu mysql 5.5 解决方法: 升级mysql至5.6 apt-cache search mysql-server sudo apt-add-repository ppa:ond ...

  9. 设计模式--工厂模式Factory(创建型)

    工厂模式属于创建型模式,分为三类,简单工厂模式.工厂方法模式.抽象工厂模式. 一.简单工厂模式 在工厂中做判断,根据产品类型从而创造相应的产品,当增加新产品时需要修改工厂类. 例如: enum CTY ...

  10. windows网络编程

    1.协议的特征 面向消息的和基于流的 面向连接的和面向无连接的 2.端口分为三类:“已知”端口.已注册端口.动态和私用端口 0~1023 IANA控制,为固定服务保留的 1024~49151 已注册端 ...