复制的用途
数据分布:实现不同的地方维护数据拷贝,比如各个数据中心之间。 负载均衡 将读取分布在不同服务器上,针对读取密集型的程序效果很好。 备份:复制对于备份很有帮助,比如主从复制 高可用性和故障转移:显著减少故障停机时间
主从复制原理图
原理图解析 #第一步:在主服务器上记录二进制日志,在每个更新数据的事务完成之前,主服务器都会把数据更改到二进制日志中。即使事务在执行期间是交错的,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
创建二进制日志路径目录并赋予属主属组 #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;
从服务器查看状态 # show slave status;
主服务器二进制日志的位置为: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> show databases;
查看test数据库的表及字段
#主服务器的数据已经完整的复制至从服务器上,主从复制成功!
PS:此实验仅拿一台主一台从服务器做主从,我们也可以实现一主多从。
水平有限,如有不妥之处请及时指出,谢谢
本文出自 “西风瘦猪” 博客,请务必保留此出处http://jungege.blog.51cto.com/4102814/1394394