主从服务器
什么是主从服务器
主从服务器就是多台服务器协同工作 , 有一台是主服务器 , 其他为从服务器 , 就是我们的主从服务器
image.png
这个是我们生活中常见的主从服务器(一主多从)
主从配置的架构 , 可以让我们的访问量提升
主从配置的机构 , 可以实现读写分离 , 主服务器写数据 , 冲服务器读数据
主从配置的架构 , 必须实现 server-id , 这个 id 值是在这个架构群里面每一台 , 都不重复 总结 : * 主从服务器架构 , 可以有效的提升数据的安全性 , 数据实现了多台服务器共享 , 每条服务器保证数据的完全一致
主从服务器的实现原理
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';
image.png
查看创建好的用户
select host, user from mysql.user;
image.png
使用新创建的账户登录一下
image.png
登录不成功 ! 因为使用的是 127.0.0.1 的 IP 再次登录
image.png
验证登录成功 , 权限也是相对应的 删除用户
drop user 'xiaoming'@'%';
image.png
再次创建一个用户
image.png
bin-log 日志的讲解
配置 server-id
打开配置文件
image.png
说明 : 配置文件所在位置可能有有所不同 , 请根据自己情况来
image.png
保存退出 :
停止 mysql 服务器
image.png
开启 mysql 服务器
image.png
查看 bin 日志所在路径 :
bin 日志就是保存在我们数据目录里面的
log-bin.000001 这个就是二进制日志文件
log-bin.index 这个就是人禁止日志索引文件
log-bin : 这个就是我们在 my.cnf 里面配置的名字 使用工具查看 log-bin 里面的信息
image.png
使用它查看
image.png
在mysql 客户端查看 bin 日志内容
image.png
工具 , 与 mysql 命令对比 mysql 查看更方便 , 查看更清晰
对 mysql 查看命令 , 进一步说明
image.png
查看指定的日志文件名
和 bin-log 日志相关的一些函数
刷新日志文件 , 生成一个新的日志文件
flush logs;
image.png
查看日志文件 :
image.png
这个时候 , 日志文件就有两份了 , 0000001 这个文件就可以保存备份 , 方便以后需要的时候使用
重启服务器 , 也会生成新的 日志文件
image.png
查看日志文件
image.png
确定不需要的日志文件 , 删除 , 重新生成一个新的
image.png
查看日志文件 :
查看正在使用的是按一个日志文件 :
image.png
可以使用 log-bin 日志完成数据恢复
log-bin 里面保存的二进制内容 , 就是 SQL语句 . 我们的数据遗失了 , 就可以通过再一次执行这些 SQL 语句 , 完成数据的恢复
创建一个表
image.png
插入数据 :
image.png
查看数据 :
image.png
查看 bin 日志 查看记录
image.png
bin 日志里面完美记录了我们的操作信息
实现一个操作
image.png
删除表
查看 bin 日志
image.png
找到恢复工具
image.png
Mysqlbinlog 就是恢复工具
查看帮助信息 :
image.png
确认使用参数 :
start-position : 开始位置
stop-position : 结束位置
no-defaults : 不能使用默认配置 使用操作 :
image.png
开始恢复数据
确认数据库信息
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 工具来进行恢复 指定的用户必须要有权限 , 才可以实现恢复 !!!
image.png
查看数据库
image.png
查看数据
image.png
操作成功
主从复制的配置
配置主服务器
授权权限 : replication slave 这个是给从服务器链接主服务器使用的权限 , 这个只能是从服务器连接主服务器的时候使用
在主服务器上面完成用户创建操作 , 并且给权限是 : replication slave
image.png
这个账户才有从拂去连接主服务器的权限 说明 : 这里我们使用的 IP 地址是 % (所有的) , 但在公司要写具体的 IP 地址 (公司的 IP地址不变)
确定主服务器
server-id 与 bin 是否设置成功
image.png
确定设置成功
确定防火墙
是可以让从服务器连接的
image.png
目前是启动状态 , 关闭
image.png
配置从服务器
确定使用 windows 做从服务器
image.png
找到配置文件
image.png
打开配置文件
image.png
修改内容如上 , 确认保存关闭 , 这里是新加 没有删除任何内容
重启 mysql 服务器
image.png
登录 windows 的 mysql 客户端
image.png
确定数据库中的信息
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 :这个配置的文件,必需是主服务器正在使用。 确定主服务器正在使用 : 在主服务器上面操作 :
image.png
master_log_pos :就是配置主服务器上面bin日志文件的最后的位置。 配置了值个位置 , 从服务器就会从主服务器上面的这个位置开始读取内容 , 所以我们在配置主从的时候 , 一定要从服务器的数据已经和主服务器保存同步 没有同步数据 , 去配置主从很危险 , 因为从服务器是执行主服务器拿过来的 SQL 语句 , 这个 SQL语句如果是插入数据 , 然后 从服务器没有没用同步数据 , 就没有这个表 就不会插入成功 所以 , 在同步之前 , 一定要做 数据同步 , 这个而是人工操作
开始配置 :
从服务器上面操作 :
image.png
查看从机状态
image.png
启动主从配置
image.png
查看启动后的状态
image.png
查看中继日志文件
image.png
这个生成的原理和主机是一样的 , 从其服务器 , 这个文件也再次生成
操作主服务器 : 插入数据
image.png
查看从服务器
image.png
功能实现
通知从服务
image.png
查看状态
image.png
在主服务器上更新数据
image.png
查看从服务器上面的数据
image.png
停止主从之后 , 就不会在获得主服务器的 bin 日志文件内容
在主服务器上面插入数据
image.png
在开启从服务配置:
image.png
查看状态
image.png
查看数据
image.png
说明 : 第一次的更新 , 从服务器也执行了 , 因为表里面没有这个数据 ,所以就执行失败了 , 这里再一次说明了 , 表的同步一致性是多么重要 第二条插入 , 就完美执行了
从服务器管理
查看状态
show slave status\G
开始从服务器
start save
停止从服务器
stop slave
清空从服务器
reset slave all
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