MySQL 复制详解及简单实例
主从复制技术在MySQL中被广泛使用,主要用于同步一台服务器上的数据至多台从服务器,可以用于实现负载均衡,高可用和故障切换,以及提供备份等等。MySQL支持多种不同的复制技术,诸如单向,半同步异步复制等以及不同级别的复制,诸如数据库级别,表级,跨库同步等等。本文简要描述了一个基本的主从复制并给出示例。
1、复制的基本原理(步骤)
a、在主库上把数据更改记录的二进制日志(binary log)
b、从库上的I/O线程连接到主库并请求发送其二进制日志文件(主库上的binlog dump线程将二进制日志内容发送到从库)
c、从库上的I/O线程读取主服务发送的二进制内容并将其拷贝到中继日志
d、从库上的SQL线程读取中继日志并执行日志中包含的更新
2、为配置文件添加复制项
# 本文的演示基于同一服务器上的多实例环境,其中3406端口用作主库,而3506用作从库。 # 关于多实例的部署可参考: # MySQL多实例配置(一) http://blog.csdn.net/leshami/article/details/40339167 # MySQL多实例配置(二) http://blog.csdn.net/leshami/article/details/40339295 # 3406与3506为都为新装且含缺省库等,所以本文演示中未涉及先迁移主库数据到备库步骤 a、主库上的配置文件 # more my3406.cnf [mysqld] socket = /tmp/mysql3406.sock port = 3406 pid-file = /data/inst3406/data3406/my3406.pid user = mysql log-error=/data/inst3406/data3406/inst3406.err datadir=/data/inst3406/data3406 basedir=/app/soft/mysql5 #### for master items #### server-id=3406 log_bin=/data/inst3406/log/bin/inst3406bin innodb_flush_log_at_trx_commit=1 sync_binlog=1 b、从库上的配置文件 # more my3506.cnf [mysqld] socket = /tmp/mysql3506.sock # Author : Leshami port = 3506 # Blog : <a target="_blank" href="http://blog.csdn.net/leshamipid-file" rel="external nofollow" >http://blog.csdn.net/leshami pid-file</a> = /data/inst3506/data3506/my3506.pid user = mysql log-error=/data/inst3506/data3506/inst3506.err datadir=/data/inst3506/data3506 basedir=/app/soft/mysql5 #### for slave items #### server-id=3506 relay_log=/data/inst3506/log/relay/relay-bin read_only=1 |
3、创建复制账号
#启动端口为3406的实例并添加账户 [mysql@app ~]$ mysqld_safe --defaults-file=/data/inst3406/data3406/my3406.cnf & [mysql@app ~]$ mysql -P3406 #登陆到3406 master@localhost[(none)]> show variables like 'server_id'; +---------------+-------+ | Variable_name | Value | +---------------+-------+ | server_id | 3406 | +---------------+-------+ #创建用于复制的账户 master@localhost[(none)]> grant replication slave,replication client on *.* -> to repl@'192.168.1.177' identified by 'repl'; #初始化主库日志文件,生成环境慎用reset master@localhost[(none)]> reset master; Query OK, 0 rows affected (0.01 sec) #查看主库的状态,日志初始化至000001, master@localhost[(none)]> show master status,Position为120 +--------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +--------------------+----------+--------------+------------------+-------------------+ | inst3406bin.000001 | 120 | | | | +--------------------+----------+--------------+------------------+-------------------+ |