mysql 复制用户_MySQL复制.md

主从复制简介

主从复制即将一台MySQL实例(Master)的数据复制到一个或多个MySQL实例(Slave)。默认情况下,复制是异步的;Slave不需要持久连接来接收来自Master的更新。根据配置,可以自定义复制的对象是实例中的所有数据库,或指定的数据库甚至某几张指定的表。

首先master把数据变化作为事件记录到binlog中,然后slave通过I/O线程读取master上的binlog,并且把它写入到slave的中继日志中,接着SQL线程读取中继日志,并且在slave本地库上重放,从而实现MySQL复制。下例介绍是基于主库binlog的name及应用的position来配置的。

配置主库

主库必须启用二进制日志并有唯一的server ID,设置后需要重启mysql服务生效。主从数据传输同步是根据binlog实现的,如果未启用binlog,复制是不可能的。复制组内每个服务器都必须有一个唯一的server ID,此ID用来标识各个服务器,且范围在1-power(2,32)-1之间的整数,如不设置将如法配置复制。

[mysqld]

log-bin=mysql-bin

server-id=1

innodb_flush_log_at_trx_commit=1

sync_binlog=1

创建复制用户

从库需要帐号来连接主库,帐号需要具有REPLICATION SLAVE权限,一般会单独创建一个仅具有REPLICATION SLAVE权限的用户用于复制。

[master]

mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'10.141.8.174' IDENTIFIED BY 'p4word';

Query OK, 0 rows affected (0.02 sec)

获取主库二进制日志执行位置并同步数据

配置复制需要指定从库开始执行主库的二进制日志的起始执行位置,因此当从库同步主库现有数据时,需要停止在主库上执行更新语句,然后获得主库的当前二进制日志坐标并基于此位置备份数据。如果主库继续执行更新操作,可能导致主从数据不一致。

获取主库二进制日志坐标的方式:

主库执行FLUSH TABLES WITH READ LOCK 语句:

mysql> FLUSH TABLES WITH READ LOCK;

mysql> show master status;

该语句刷新所有表及块写入语句,对于InnoDB表还会阻塞Commit。非正常退出该session,FLUSH TABLES仍会生效,如使用exit退出该会话,锁会被释放。

获取主库数据快照

如果新配置的主从复制可忽略本步骤,如果创建的主库已存在数据,需要创建一个主库的数据快照并在从库中恢复。获取数据快照的方式很多,可使用备份工具如:mysqldump、xtrabackup等,也可直接拷贝主库数据文件。

释放读锁

备份完成后,释放主库锁定

mysql> UNLOCK TABLES;

如果配置表都是InnoDB等支持事务的表,可以跳过手工设定锁定的操作,mysqldump --single-transaction --master-data来确保快照一致性。

配置从库

如果有多个slave,各从库也必须有唯一的server ID,不能省略,否则拒绝连接。

[mysqld]

server-id=2

启动生效后,从库执行CHANGE MASTER TO语句,启动复制,change master 语法。

mysql> change master to master_user='repl',

master_password='p4word',

master_host='10.141.8.173',

master_log_file='mysql-bin.000007',

master_log_pos=120;

Query OK, 0 rows affected, 2 warnings (0.11 sec)

导入主库快照数据后,启动复制线程,同步主从数据

mysql> start slave; ## 启动复制线程

Query OK, 0 rows affected (0.06 sec)

查看主从复制状态

mysql> show slave status \G;

当slave_IO_Running、Slave_SQL_Running均为Yes,则表示复制可以正常运行。如复制不能正常进行,状态及错误日志将会出现错误信息,一般常见的错误的原因有:操作系统防火墙,Selinux,主库信息错误,server_id未设置或重复,server_uuid重复及主从数据问题。

验证同步效果

[master]

mysql> create table test.sysc (

> id int primary key,

-> name varchar(10)

-> );

Query OK, 0 rows affected (0.04 sec)

mysql> insert into test.sysc values(1001,'1001');

Query OK, 1 row affected (0.00 sec)

mysql> insert into test.sysc values(1002,'1002');

Query OK, 1 row affected (0.03 sec)

[slave]

mysql> use test;

Database changed

mysql> show tables;

+----------------+

| Tables_in_test |

+----------------+

| sysc |

+----------------+

1 row in set (0.00 sec)

mysql> select * from sysc;

+------+------+

| id | name |

+------+------+

| 1001 | 1001 |

| 1002 | 1002 |

+------+------+

2 rows in set (0.00 sec)

以下几种状态对判断主从复制延迟及处理主从复制故障很重要。

Master_Log_File & Read_Master_Log_Pos:IO线程读取的当前主库binlog位置信息。

Relay_Master_Log_File & Exec_Master_Log_Pos:SQL线程当前读取执行的主库binlog位置信息。

Relay_Log_File & Relay_Log_Pos:SQL线程当前读取执行的中继日志位置信息。

Slave_IO_Running & Slave_SQL_Running:当前复制状态是否正常

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值