MySQL(Percona Server) 5.6 主从复制
2016-06-21 16:54
603 查看
例如我们同步的数据库为:test。如果需要同步多个数据库下面会有说明。
MySQL主从复制原理
1.master将改变记录到二进制日志(binarylog)中(这些记录叫做二进制日志事件,binarylogevents,可以通过showbinlogevents进行查看); 2.slave将master的binarylogevents拷贝到它的中继日志(relaylog); 3.slave重做中继日志中的事件,将改变反映它自己的数据。
主库(192.168.2.21):
主库开放3306端口
查看开放的端口:
或
#iptables-L-n
授权同步账户
mysql>flushprivileges;
授权格式为:
GRANTREPLICATIONSLAVEON*.*TOusername@'ipaddress'IDENTIFIEDBY'password'。
现在可以在192.168.2.22从库上测试是否可以访问:
配置主库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的三种格式
STATEMENT、
ROW、
MIXED,详见
可以通过
showvariableslike'binlog_format';查看。
保存,重启MySQL:
拷贝主库需要同步的数据到从库
进入mysql终端/usr/local/mysql/bin/mysql-uroot-p:
设置主库成只读状态
mysql>FLUSHTABLESWITHREADLOCK;
重置binlog日志
查看运行状态
*******************1.row*******************
File:mysql-bin.000001
Position:120
Binlog_Do_DB:test
Binlog_Ignore_DB:
Executed_Gtid_Set:
1rowinset(0.00sec)
此处需记录
File和
Position两个值,下面从库的
CHANGEMASTERTO命令中需要用到这两个值。
接下来
切换到从库服务器,导出主库中需要同步的数据,并导入到从库:
#/usr/local/mysql/bin/mysql-uroot-ptest<dumptest.db
再回到主库服务器,解锁主库数据库只读状态
从库(192.168.2.22):
配置从库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:
指定主库
进入MySQL终端:MASTER_HOST='192.168.2.21',
MASTER_USER='rep',
MASTER_PASSWORD='123',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=120;
启动从库连接
查看从库状态
mysql>SHOWSLAVESTATUS\G;
......
Slave_IO_Running:Yes
Slave_SQL_Running:Yes
......
两个Yes成功。
测试
现在可以在主库中插入/更新数据,添加表等操作,看从库是否可以同步相应的数据。问题
在最后使用SHOWSLAVESTATUS\G;查看slave运行状态时,有一个错误:
Last_IO_Error:Fatalerror:TheslaveI/OthreadstopsbecausemasterandslavehaveequalMySQLserverUUIDs;theseUUIDsmustbedifferentforreplicationtowork.
/var/lib/mysql/auto.cnf文件中的
server-uuid的值是一样的。随便改一个值,但是值的格式不能变,不与群组中的其他server-uuid重复即可。
改完之后,重启mysql:
#servicemysqlrestart
再次使用
SHOWSLAVESTATUS\G;查看状态正常。
附两个小命令:
mysql>SHOWSLAVEHOSTS;#需在master中执行,查看slave列表,包括相应的server-uuid值
mysql>showvariableslike'server_uuid';#查看本机的server-uuid值
GoodLuck!
相关文章推荐
- 修改mysql默认字符集的方法(插入数据库数据乱码)
- mysql 集群
- mysql concat_ws与concat区别
- MySQL基础操作
- MySQL函数一览_MySQL函数全部汇总
- MySQL数据记录基本操作——多表查询、子查询和正则表达式查询
- mysql水平拆分与垂直拆分的详细介绍
- mysql笔记之最基本
- mysql 5.7.12 winx64安装配置方法图文教程
- MySQL5.7表空间加密
- mysql存储过程中使用事务
- 仅使用MYSQL文件.frm恢复表结构
- mysql 导入导出函数及存储过程
- mysql 复制
- mysql性能优化之swap占用高
- mysql 语句
- mysql binlog 数据介绍
- MySQL性能优化的最佳21条经验
- 针对mysql中分表批量添加字段
- MySQL表中的字符串替换