MySQL - 主备

MySQL - 主备,第1张

在实际的生产中,为了解决Mysql的单点故障,一般都会采用「主备模式」。

MySQL几乎所有的高可用架构,都直接依赖于 binlog。虽然这些高可用架构已经呈现出越来越复杂的趋势,但都是从最基本的一主一备演化过来的。

下图为主备切换流程

在状态 1 中,客户端的读写都直接访问节点 A,而节点 B 是 A 的备库,只是将 A 的更新都同步过来,到本地执行。这样可以保持节点 B 和 A 的数据是相同的。

当需要切换的时候,就切成状态 2。这时候客户端读写访问的都是节点 B,而节点 A 是 B 的备库。

在状态 1 中,虽然节点 B 没有被直接访问,但是依然建议把节点 B(也就是备库)设置成只读(readonly)模式。这样做,有以下几个考虑:

图下图 中画出的就是一个 update 语句在节点 A 执行,然后同步到节点 B 的完整流程图。

备库 B 跟主库 A 之间维持了一个长连接。主库 A 内部有一个线程,专门用于服务备库 B 的这个长连接。一个事务日志同步的完整过程是这样的:

在备库 B 上通过 change master 命令,设置主库 A 的 IP、端口、用户名、密码,以及要从哪个位置开始请求 binlog,这个位置包含文件名和日志偏移量。

在备库 B 上执行 start slave 命令,这时候备库会启动两个线程,就是图中的 io_thread 和 sql_thread。其中 io_thread 负责与主库建立连接。

主库 A 校验完用户名、密码后,开始按照备库 B 传过来的位置,从本地读取 binlog,发给 B。

备库 B 拿到 binlog 后,写到本地文件,称为中转日志(relay log)。

sql_thread 读取中转日志,解析出日志里的命令,并执行。

主库需要复制新增binlog到从库才能完成同步,这个同步过程就是同步延迟。主从延迟最直接的表现是,备库消费中转日志(relay log)的速度,比主库生产 binlog 的速度要慢。

「同步策略」:Master会等待所有的Slave都回应后才会提交,这个主从的同步的性能会严重的影响。

「半同步策略」:Master至少会等待一个Slave回应后提交。

「异步策略」:Master不用等待Slave回应就可以提交。

「延迟策略」:Slave要落后于Master指定的时间。

对于不同的业务需求,有不同的策略方案,但是一般都会采用最终一致性,不会要求强一致性,毕竟强一致性会严重影响性能。

MYSQL主从同步原理:

1) MYSQL主从同步是异步复制的过程,整个同步需要开启3线程,master上开启bin-log日志(记录数据库增、删除、修改、更新 *** 作);

2) Slave开启I/O线程来请求master服务器,请求指定bin-log中position点之后的内容;

3) Master端收到请求,Master端I/O线程响应请求,bin-log、position之后内容返给salve;

4) Slave将收到的内容存入relay-log中继日志中,生成master.info(记录master ip、bin-log、position、用户名密码);

5) Slave端SQL实时监测relay-log日志有更新,解析更新的sql内容,解析成sql语句,再salve库中执行;

6) 执行完毕之后,Slave端跟master端数据保持一致!

**MYSQL bin-log用途**

1) bin-log日志最大的功能记录数据库增、删、改、插入等 *** 作,记录用户 *** 作的SQL语句;

2) bin-log日志可以用数据增量备份、完整备份;

3) bin-log还可以主要主从复制+读写分离;

lnmp一键安装包绑定域名

1、lnmp绑定域名

需要执行如下命令:/root/vhost.sh输入要绑定的域名,按提示要求 *** 作,多个域名可以用空格隔开。

设置网站目录位置必须是绝对目录,一般默认即可,也可以自定义设置自己的数据盘目录(vps推荐使用)。

伪静态规则和网站log可以自定义选择n/y。默认已经有了discuz、discuzx、wordpress、sablog、emlog、dabr、phpwind、wp2(二级目录wp伪静态)、dedecms、drupal、ecshop、shopex等程序的规则,可直接输入以上名称即可。

2、lnmp删除域名

如果需要删除域名(即虚拟主机)。ssh登陆执行命令:

rm /usr/local/nginx/conf/vhost/域名.conf

所有 *** 作执行完毕记得执行:

/root/lnmp restart

重启lnmp使设置生效。

nginx.conf测试失败的解决方法

重启时提示nginx.conf验证失败:configuration file /usr/local/nginx/conf/nginx.conf test failed

解决方法:如果有备份直接恢复,没备份的话,把lnmp0.5/conf下面的nginx.conf覆盖上,注意修改一下里面的默认虚拟主机的信息。

验证成功的提示:the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok

lnmp更改网站文件目录

1、直接修改域名.conf文件

军哥的lnmp安装包,默认的虚拟主机配置环境在 /usr/local/nginx/conf/vhost/ 目录:

vi /usr/local/nginx/conf/vhost/域名.conf

可以打开对应的虚拟主机配置,然后修改其中的网站目录。然后执行:cp -a 老目录 新目录,chown www:www -R 新目录。

2、修改nginx.conf文件

修改:/usr/local/nginx/conf/nginx.conf 文件,大概在66行左右,将之前旧的网站目录设为新的目录即可。

root /home/wwwroot/default

这是lnmp1.0默认网站目录,可自己自定义修改成自己的网站目录。

lnmp更改MySQL目录

1.停掉mysql服务器:

/etc/init.d/mysql stop

2.下面新目录以/data/mysql/ 为例,然后复制旧目录的数据库到新目录:

cp -R /usr/local/mysql/var/* /data/mysql/

3.将新目录赋权为mysql用户组:

chown mysql:mysql -R /data/mysql/

4.再修改配置文件:

vi /etc/my.cnf

查找[mysqld] ,在下面加入datadir = /data/mysql/ 保存

5.启动mysql:

/etc/init.d/mysql start


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/8349398.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-15
下一篇 2023-04-15

发表评论

登录后才能评论

评论列表(0条)

保存