mysql授权管理和主从复制以及读写分离
授权管理
太过于使用root用户,会风险,通产规建立一些低权限用户,只负责一部分库。
--创建了一个名为:test 密码为:1234 的用户 create user 'test'@'localhost' identified by '1234';
-
格式:grant 权限列表 on 数据库名.表名 to 用户名@来源地址 【identified by ‘密码’】;
-
权限列表:用于列出授权的各种数据库操作,通过逗号分割:select,inster,update,all表示所有权限
-
库名.表名:通配符(*)表示所有
-
用户名@来源地址:用于指定用户和允许访问的客户机地址;来源地市可以是ip,域名,%通配符表示所有
-
mysql通配符::任一单个字符 192.168.1.
%:任意长度的任意字符 192.168.1.%
grant select on whml.* to 'mm'@'localhost' identified by'密码'; #给mm用户对库whml下的所有有select(查看)的权限
对grant语句授权的用户记录保存到mysql库的user中。
使用select * from user\G查看user的详细信息
-
查看用户权限:show grants for 'mm@localhost';
-
撤销用户权限:revoke all on whml.* from 'mm'@'localhost';
主从复制
-
mysql replication(mysql ab复制):从数据库会实时读取主数据库的二进制日志文件
-
优点:
-
可以通过增加服务器提高数据库平台的可靠性,在主服务器上执行写入和更新,在从服务器提供读写功能,可以动态的调整主从服务器的数量,从而调整高性能
-
安全性
-
可以在从服务器上分析数据,缓解主服务器的压力
-
-
mysql复制类型
mysql复制是指从一个mysql服务器(MASTER)将数据通过日志的方式经过网络传送到另一台或多台mysql服务器(SLAVE),然后在slave上重放(replay或redo)传送过来的日志,以达到和master数据同步的目的。
官方文档:https://dev.mysql.com/doc/refman/5.7/en/replication.html
-
异步复制(默认复制):主数据库在完成后会立即返回给客户端,不管从数据库有没有同步上,这也就导致如果主数据库在返回后down掉时,从数据库有可能没有数据,导致从数据库替代后,没有上一条数据
-
全同步复制:指当主库执行完一个事务,所有的从库都执行了该事务才返回给客户端。因为需要等待所有从库执行完该事务才能返回,所以全同步复制的性能必然会收到严重的影响。
-
半同步复制:要mysql5.7以上,是介于全同步复制与全异步复制之间的一种,主库只需要等待至少一个从库节点收到并且 Flush Binlog 到 Relay Log 文件即可,主库不需要等待所有从库给主库反馈。同时,这里只是一个收到的反馈,而不是已经完全完成并且提交的反馈,如此,节省了很多时间。
-
步骤:
- 数据修改写入master数据库的binlog中。
- slave的IO线程复制这些变动的binlog到自己的relay log中。
- slave的SQL线程读取并重新应用relay log到自己的数据库上,让其和master数据库保持一致。
mysql支持的复制方式
通过设置服务器的系统变量binlog_format来制定要使用的格式
-
基于sql语句的复制(sbr):之主服务器中执行sql语言,同时在从服务器中执行
-
基于行的复制(rbr):主服务器把表的行变化作为事件写入到二进制日志中,主服务器把代表了行变化的事件写入从服务器中
-
混合模式复制(mbr):先试用sql语言,若是无法精确则使用事件
-
rbr优点:任何情况都可以复制且安全可靠
-
rbr缺点:binlog文件较大,有大量数据,且当主服务执行多个update语句时,都会记录到binlog上有可能导致并发写问题,且不能查看执行过的sql语句
-
sbr优点:binlog文件小,可以实时还原,且主从版本可以不一样
-
sbr缺点:不是所有的update语句都会复制,且有一些函数不能复制,而且大量的行级锁表(在扫描执行时,会将表先锁起来,无法使用)