复制的用途

数据分布:实现不同的地方维护数据拷贝,比如各个数据中心之间。
负载均衡 将读取分布在不同服务器上,针对读取密集型的程序效果很好。
备份:复制对于备份很有帮助,比如主从复制
高可用性和故障转移:显著减少故障停机时间


主从复制原理图

MySQL 主从复制_MySQL主从复制




原理图解析
#第一步:在主服务器上记录二进制日志,在每个更新数据的事务完成之前,主服务器都会把数据更改到二进制日志中。即使事务在执行期间是交错的,Mysql也会串行的将事务写入到二进制日志中,之后由存储引擎提交事务
#第二步:从服务器启动一个二进制日志转储进程--Binlog Dump,该转储进程从主服务器的二进制日志中读取事件,不会对时间进行轮询,当它跟上主服务器后会进入休眠,等待有新的时间发生。I/O线程将事件写入到自己的中继日志中。然后由SQL线程读取中继日志中的事件,并重放,最后更新从服务器上的数据。




主从复制条件



  版本
# 1、双方的MySQL要一致;
# 2、如果不一致:主的要低于从的;
  从哪儿开始复制
# 1、都从0开始;
# 2、主服务器已经运行一段时间,并且存在不小的数据集把主服务器备份,然后在从服务器恢复,从主服务器上备份时所处的位置开始复制



实例演示



环境搭建
#主服务器    172.16.251.219    MySQL-5.5.33 安装
#从服务器    172.16.251.160    MySQL-5.5.33 安装
                                                             
#如何安装MySQL此处不再累述,详情请参照我的博客
http://jungege.blog.51cto.com/4102814/1386543


 (1)配置主服务器(master)


      编辑主配置文件

#service mysqld stop 关闭mysqld服务
#vim /etc/my.cnf 编辑配置文件输入如下内容:
log-bin=/mydata/binlogs/master-bin  设置二进制日志存放目录与日志名称
binlog_format=mixed                 设置二进制日志存储格式
server-id       =1                  设置server-id 为 1

MySQL 主从复制_MySQL主从复制_02

创建二进制日志路径目录并赋予属主属组
#mkdir /mydata/binlogs
#chown -R mysql.mysql /mydata/binlogs

授权从服务器连接的用户
#service mysqld start 启动mysql服务
#mysql -uroot -hlocalhost -p2597758 登录msyqld服务器
授权
mysql> grant replication slave,replication client on *.* to 'repluser'@'172.16.%.%' identified by 'repl123';
mysql> flush privileges; 重读授权表


(2)配置从服务器(slave)


     编辑配置文件

# service mysqld stop  停止mysql服务
# vim /etc/my.cnf      编辑mysql配置文件
注释如下两行(从服务器无需二进制日志)
log-bin=mysql-bin
binlog_format=mixed
设置server-id和relay-log
server-id           =2
relay-log           =/mydata/relaylogs/relay-bin


     创建relay-log存放目录及属主属组


# mkdir /mydata/relaylogs
# chown -R mysql.mysql /mydata/relaylogs



 (3)从服务器连接主服务器


# service mysqld start 启动mysqld服务
# mysql -uroot -hlocahost -p2597758 连接mysqld服务器
mysql> change master to master_host='172.16.251.219',master_user='repluser',master_password='repl123';



  (4)从服务器启动复制线程



#start slave


  (5)查看主从两台服务器当前状态


主服务器查看状态
# show  master status;
# show processlist;

 MySQL 主从复制_MySQL主从复制_03


从服务器查看状态
# show slave status;

MySQL 主从复制_MySQL主从复制_04


    主服务器二进制日志的位置为:440 ,说明从服务器已经与主服务器连接成功


   (6)进一步测试主从数据复制情况



主服务器创建一个数据库
mysql> create database test; 创建数据库test
mysql> use test
mysql> create table testuser(Name varchar(40)); 创建一个表
mysql> insert into testuer (Name) value ('zxj'); 表中插入一些数据
mysql> select * from testuser;


MySQL 主从复制_MySQL主从复制_05




从服务器查看数据复制情况
mysql> show databases;


MySQL 主从复制_MySQL主从复制_06


    查看test数据库的表及字段


MySQL 主从复制_MySQL主从复制_07



#主服务器的数据已经完整的复制至从服务器上,主从复制成功!



PS:此实验仅拿一台主一台从服务器做主从,我们也可以实现一主多从。


水平有限,如有不妥之处请及时指出,谢谢