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
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)