MySQL 经典架构之 主从复制 实践

面试官:你简历上写着 了解Mysql,那你了解主从吗?识得姆识得啊?

我:(蛤?蛀虫?是某种针对数据库的病毒或者什么攻击手段吗?)不好意思,完全不识得,很惭愧,就@@#¥微小#¥%……

 回来之后我觉得我还是太年轻,太简单,有时还有点幼稚。
 于是我夺取了实验室那本已经落了灰的《高性能MySQL》,翻到了复制的那一章节,原来,这就是书中说的主库备库的复制!
 为了学习这宝贵的人生经验,我需要动手做实验,那么就要做三件事:

  1. 用VMware 创建三个虚拟CentOS系统,装上MySQL,来当作MySQL服务器集群(一个Master服务器,两个Slave服务器);
  2. 给3台服务器的MySQL,创建好相关帐户,配置好主从关系,启动从库的相关线程;
  3. 在主服务器(Master)上创建一个测试数据,建三个表,错了是一个表,插入一些神奇数据,看看另外两个从库有没有更新。

    当然把实践过程进行各种截图保存到word里面也是很重要的!


一、主从复制原理

不讲原理的博文都有点过分,先看我下面这张我从网上盗来的图

主从复制原理美图

  1. 主库如有数据更改,就会把更改记录到图中的二进制日志(Binary log)中;
  2. 从库已经启动了一个I/O线程,这I/O线程和主库建立了一个TCP/IP连接, 主库一有更新,I/O线程就会从主库日志中复制到自己的中继日志上(Relay Log);
  3. 从库的SQL线程从中继日志中读取事件,并重放到自己的数据库中,从而完成了复制同步。
    其实书上还有更多的细节我没写出来,大概了解一下复制过程就好了吧,就三步。

二、配置主服务器Master

搞了三个数据库服务器分别为:

  • master (192.168.214.5)
  • slave1 (192.168.214.6)
  • slave2 (192.168.214.7)

1、首先进入master系统,修改my.cnf文件

# vi  /etc/my.cnf

这里写图片描述

这是为了简单起见,只写这两个,当然也可以设置更多需要的配置

2、保存,并重启mysql服务:

# service mysqld restart

3、进入 mysql, 运行 show master status, 如下图所示, master的二进制文件 mysql-bin已经在主库上创建了,这里MySQL会自己给文件名加一些数字,比如下面的000002,管它作甚,但这个文件名待会用到。

这里写图片描述


三、配置从服务器 Slave1 、Slave 2

1、修改mysql的my.cnf文件

# vi  /etc/my.cnf

这里写图片描述

其实上面几个配置里,只有server_id是必须的
log_bin 不是必须的,从库不需要二进制日志,但为什么书里建议加上这个呢?应该是为了方便以后的主库备库的互换吧
relay_log 指定中继日志的名字(如果加上路径的话,还可以指定文件位置)
log_slave_updates = 1 允许从库将其重放的事件也记录到自身的二进制日志中

2、保存,并重启mysql服务:

# service mysqld restart

slave2的配置也是一样,不过server_id不能一样


四、在主库master创建一个复制帐号

创建一个叫作“repl”的帐号,给这个帐号特殊的权限,让两个slave 可以用这个帐号来连接到 master 并读取二进制日志。

mysql > GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO ‘repl’@’192.168.214.%’IDENTIFIED BY ‘******’;

这里写图片描述

红色部分是密码,为了安全,这帐号只允许 ip 为192.168.214.* 来访问,当然你可以直接写成’%’, 反正只是做一些微小的实验


五、启动从库

就是告诉两个slave ,master在哪儿,我如何连接到master来完成那光荣的复制使命,下面是对slave1的配置,slave2是一样的

1、进入slave1系统的mysql中执行以下语句

mysql> CHANGE MASTER TO MASTER_HOST ='192.168.214.5',
       MASTER_USER ='repl',
       MASTER_PASSWORD ='123456',
       MASTER_LOG_FILE ='mysql-bin.000002',
       MASTER_LOG_POS = 0;

这里写图片描述

MASTER_LOG_POS = 0;是指要从二进制的开头读起(实际会从4开始读)。

2、查看一下复制执行状态

mysql> SHOW SLAVE STATUS\G

这里写图片描述

蛤?竟然没运行,按M安轨!还需要再执行启动命令

mysql> START SLAVE;

再查看一下
这里写图片描述


六、在主库Master上进行数据创建和更新

创建数据库 test

mysql > create database test;
mysql > use test;
mysql > create table hath_info(
         uid int not null auto_increment,
         name varchar(20) not null,
         slogan varchar(40) not null,
         primary key(uid)
);

插入一条神奇的数据

mysql > insert into hath_info(name, slogan) values(‘hath_007’,’too young, too simple, sometimes naive’);

七、到从库 slave1 和 slave2 上分别查看是否有变

下面查看的是slave1数据库(slave2同)
这里写图片描述

同步成功,表示热烈的祝霍


总结
  第一篇博客终于写完成,姿势水平很低,有点拿衣服,类似的文章网上有很多,我只是希望做一点微小的工作,把自己的实践记录下来,达到+1s的效果。
  如果有人不幸看到这篇文章,发现有问题的地方希望能指出,把我批判一番!我会不停地积累,争取有一天写的东西能让几百个程序员一致通过!
  
  下一篇我打算试试读写分离,希望能有下一篇。

  


参考文献
《高性能MySQL》第十章 复制
Edison Chou的博文
影中的你 的BLOG
还有一些博文,但我看完后就关掉了,忘了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值