mysql percona server_MySQL(Percona Server) 5.6 主从复制

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 的三种格式 STATEMENT、ROW、MIXED,详见 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)

此处需记录 File 和 Position 两个值,下面从库的 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:YesSlave_SQL_Running:Yes......

两个 Yes 成功。

测试

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

问题

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

Last_IO_Error:Fatalerror:Theslave I/O thread stops because master andslave have equal MySQLserver UUIDs;these UUIDsmust be different forreplication 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!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值