为了账号安全,请及时绑定邮箱和手机立即绑定

MySQL 优化二

标签:
MySQL

主从服务器

什么是主从服务器

主从服务器就是多台服务器协同工作 , 有一台是主服务器 , 其他为从服务器 , 就是我们的主从服务器

700

image.png

这个是我们生活中常见的主从服务器(一主多从)

  • 主从配置的架构 , 可以让我们的访问量提升

  • 主从配置的机构 , 可以实现读写分离 , 主服务器写数据 , 冲服务器读数据

  • 主从配置的架构 , 必须实现 server-id , 这个 id 值是在这个架构群里面每一台 , 都不重复 总结 : * 主从服务器架构 , 可以有效的提升数据的安全性 , 数据实现了多台服务器共享 , 每条服务器保证数据的完全一致

主从服务器的实现原理

700

image.png

说明 : 主服务器必须配置一个 server-id 这个值是架构群里面唯一的 , 然后在开启一个 bin 日志(二进制日志) . 主服务器必须开启一账户让从服务器可以连接 , 这个账户必须有权限去读取二进制文件内容 , 从服务器必须配置链接主服务器的信息 , 并且能够成功的连接上主服务器 , 然后 IO 进程读取主服务器的二进制日志文件 , 保存在自己的电脑上的中继日志文件里面 , 然后 SQL 进程读取中继日志文件 , 在一起执行这个 SQL 语句

主服务器 配置 : server-id 日志 : bin 日志 (记录 SQL语句 , 修改数据结构 , 修改表信息等修改的语句) 配置账户 : 这个账户是从服务器链接的时候使用 (必须要有权限)

从服务器 配置 : server-id 配置 : 链接主服务器信息 中继日志 : 是自行开启的 , 可以不用配置

注意 : 从服务器能够顺利的连接主服务器 网络要通 防火墙关闭或者对应的端口要打开

MySQL服务器添加(授权)账号

grant  权限  on  库名.表明  to  用户名@IP地址  identified  by  用户密码

这句话意思 : 设置权限 , 并给创建这个用户 , 同时设置密码 权限 : all : 所有权限 ; select : 查询权限 库名 : * : 所有权限 ; test : 指定 test 库 表名 : * ; 所有表 ; test : 指定 test 表

用户名 : 随便写必须加引号 IP 地址 : % : 表示所有 IP 地址 , 必须加引号 windows 上面包含 127.0.0.1 , Linux 上面不包含127.0.0.

  • 创建一个用户 : 并给权限 , 并给密码

grant all on *.* to 'xiaoming'@'%' identified by '123456';

700

image.png

查看创建好的用户

select host, user from mysql.user;

700

image.png

  • 使用新创建的账户登录一下

700

image.png

登录不成功 ! 因为使用的是 127.0.0.1 的 IP 再次登录

700

image.png

验证登录成功 , 权限也是相对应的 删除用户

drop user 'xiaoming'@'%';

700

image.png

再次创建一个用户

700

image.png

bin-log 日志的讲解

配置 server-id

  • 打开配置文件

700

image.png


说明 : 配置文件所在位置可能有有所不同 , 请根据自己情况来

700

image.png

保存退出 :

  • 停止 mysql 服务器

700

image.png

  • 开启 mysql 服务器

700

image.png

  • 查看 bin 日志所在路径 :

  • bin 日志就是保存在我们数据目录里面的

  • log-bin.000001 这个就是二进制日志文件

  • log-bin.index 这个就是人禁止日志索引文件

  • log-bin : 这个就是我们在 my.cnf 里面配置的名字 使用工具查看 log-bin 里面的信息

700

image.png

使用它查看

700

image.png

  • 在mysql 客户端查看 bin 日志内容

700

image.png

  • 工具 , 与 mysql 命令对比 mysql 查看更方便 , 查看更清晰

  • 对 mysql 查看命令 , 进一步说明

700

image.png


查看指定的日志文件名

和 bin-log 日志相关的一些函数

刷新日志文件 , 生成一个新的日志文件

flush logs;

700

image.png

查看日志文件 :

700

image.png

这个时候 , 日志文件就有两份了 , 0000001 这个文件就可以保存备份 , 方便以后需要的时候使用

重启服务器 , 也会生成新的 日志文件

700

image.png

查看日志文件

700

image.png

确定不需要的日志文件 , 删除 , 重新生成一个新的

700

image.png

查看日志文件 :

查看正在使用的是按一个日志文件 :

700

image.png

可以使用 log-bin 日志完成数据恢复

log-bin 里面保存的二进制内容 , 就是 SQL语句 . 我们的数据遗失了 , 就可以通过再一次执行这些 SQL 语句 , 完成数据的恢复

创建一个表

700

image.png


插入数据 :

700

image.png

查看数据 :

700

image.png

查看 bin 日志 查看记录

700

image.png

bin 日志里面完美记录了我们的操作信息

实现一个操作

700

image.png

  • 删除表

  • 查看 bin 日志

700

image.png

  • 找到恢复工具

700

image.png

Mysqlbinlog 就是恢复工具

  • 查看帮助信息 :

700

image.png

确认使用参数 :


    • start-position : 开始位置


    • stop-position : 结束位置


    • no-defaults : 不能使用默认配置 使用操作 :

700

image.png

开始恢复数据

  • 确认数据库信息

700

image.png

  • 开始恢复

/usr/local/mysql/bin/mysqlbinlog --no-defaults --start-position=107 --stop-position=1148 /usr/local/mysql/data/log-bin.000001 | /usr/local/mysql/bin/mysql -u root -p

mysqlbinlog 只能读出数据 , 需要把读出来的数据通过管道给 mysql 工具来进行恢复 指定的用户必须要有权限 , 才可以实现恢复 !!!

700

image.png

查看数据库

700

image.png

查看数据

700

image.png

操作成功

主从复制的配置

配置主服务器

授权权限 : replication slave 这个是给从服务器链接主服务器使用的权限 , 这个只能是从服务器连接主服务器的时候使用

在主服务器上面完成用户创建操作 , 并且给权限是 : replication slave

700

image.png

这个账户才有从拂去连接主服务器的权限 说明 : 这里我们使用的 IP 地址是 % (所有的) , 但在公司要写具体的 IP 地址 (公司的 IP地址不变)

确定主服务器

server-id 与 bin 是否设置成功

700

image.png

确定设置成功

确定防火墙

是可以让从服务器连接的

700

image.png


目前是启动状态 , 关闭

700

image.png

配置从服务器

确定使用 windows 做从服务器

594

image.png

找到配置文件

594

image.png

打开配置文件

700

image.png

修改内容如上 , 确认保存关闭 , 这里是新加 没有删除任何内容

重启 mysql 服务器

586

image.png

登录 windows 的 mysql 客户端

700

image.png

确定数据库中的信息

700

image.png

就可以去配置我们从服务器连接主服务器 : 配置信息
  • change master to master_host=’主机IP’,

  • master_user=’主机配置给从机的账户’,

  • master_password=’主机配置给从机的账户密码’,

  • master_port=’主机的端口号’,

  • master_log_file=’主机bin日志文件,正在使用的文件名’,

  • master_log_pos=’主机bin日志文件的内容,从那个节点开始复制’

  • master_log_file :这个配置的文件,必需是主服务器正在使用。 确定主服务器正在使用 : 在主服务器上面操作 :

700

image.png


master_log_pos :就是配置主服务器上面bin日志文件的最后的位置。 配置了值个位置 , 从服务器就会从主服务器上面的这个位置开始读取内容 , 所以我们在配置主从的时候 , 一定要从服务器的数据已经和主服务器保存同步 没有同步数据 , 去配置主从很危险 , 因为从服务器是执行主服务器拿过来的 SQL 语句 , 这个 SQL语句如果是插入数据 , 然后 从服务器没有没用同步数据 , 就没有这个表 就不会插入成功 所以 , 在同步之前 , 一定要做 数据同步 , 这个而是人工操作

开始配置 :

从服务器上面操作 :

700

image.png

查看从机状态

700

image.png

启动主从配置

700

image.png

查看启动后的状态

700

image.png

查看中继日志文件

700

image.png


这个生成的原理和主机是一样的 , 从其服务器 , 这个文件也再次生成

操作主服务器 : 插入数据

700

image.png

查看从服务器

700

image.png

功能实现

通知从服务

700

image.png


查看状态

700

image.png

在主服务器上更新数据

700

image.png

查看从服务器上面的数据

700

image.png


停止主从之后 , 就不会在获得主服务器的 bin 日志文件内容

在主服务器上面插入数据

700

image.png


在开启从服务配置:

700

image.png

查看状态

700

image.png

查看数据

700

image.png

说明 : 第一次的更新 , 从服务器也执行了 , 因为表里面没有这个数据 ,所以就执行失败了 , 这里再一次说明了 , 表的同步一致性是多么重要 第二条插入 , 就完美执行了

从服务器管理

查看状态

show slave status\G

开始从服务器

start save

停止从服务器

stop slave

清空从服务器

reset slave all

700

image.png

重点说明 :

清空之前 , 清先停止服务器

读写分离设置

$db1 = ‘主服务器’; $db2 = ‘从服务器’; $db3 = ‘从服务器’;

实现读写分离的特别的简单的,就是你要连接上所以的服务器。 写数据的时候,就要指定我们的$db1。指定到主服务器。

查询数据的时候,指定到从服务器就可以了。

$db1 = mysqli_connect(‘123.123.123.123’, ‘baqi’, ‘fsaf@*&kjfdk123’, ‘liu’);

$db2 = mysqli_connect(‘123.123.123.124’, ‘baqi’, ‘fsaf@*&kjfdk123’, ‘liu’);

$db3 = mysqli_connect(‘123.123.123.125’, ‘baqi’, ‘fsaf@*&kjfdk123’, ‘liu’);

$sql = “insert into table_name values (值1,值2)”; mysqli_query($db1, $sql);

从服务器有多台的时候,就应该实现一个算法,然后只返回一个链接就可以了。 $sql = “select * from table_name where id in (1,2)”; mysqli_query($db2, $sql);



  • 作者:记住你姓李
    链接:https://www.jianshu.com/p/ae042357b8d0

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消