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 主从复制

           

创建二进制日志路径目录并赋予属主属组
#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 主从复制    

     

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

MySQL 主从复制  

   

    主服务器二进制日志的位置为: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> show databases;

     

     MySQL 主从复制      

                                                 

    查看test数据库的表及字段


     MySQL 主从复制


     

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



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


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

                                                                                     

本文出自 “西风瘦猪” 博客,请务必保留此出处http://jungege.blog.51cto.com/4102814/1394394

MySQL 主从复制,布布扣,bubuko.com

MySQL 主从复制

上一篇:SQL92标准与SQL99标准查询


下一篇:mysql innodb_buffer_pool