博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Mysql运维管理-生产场景Mysql主从复制读写分离授权方案及实战15
阅读量:5933 次
发布时间:2019-06-19

本文共 5678 字,大约阅读时间需要 18 分钟。

1.生产MySQL复制环境用户授权方案

Mysql DBA 高级运维学习笔记-生产场景Mysql主从复制读写分离授权方案及实战

那么怎么才能达到上述效果呢?

(1) 生产环境主库用户授权

mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON 'blog'.* TO 'blog'@'192.168.10.%' identified '123456';

提示:特殊业务可能权限会略多,如果业务安全性不高也可以all privileges

(2) 生产环境从库用户的授权

mysql> GRANT SELECT,INSERT,UPDATE,DELETE ON 'blog'.* TO 'blog'@'192.168.10.%' identified '123456';mysql> REVOKE INSERT,UPDATE,DELETE ON 'blog'.* TO 'blog'@'192.168.10.%';

(3) 生产授权案例说明:这里表示给192.168.10.%的用户blog管理blog数据库的所有表(*表示所有表)只读权限(SELECT),密码为123456。

GRANT SELECT,INSERT,UPDATE,DELETE ON 'blog'.* TO 'blog'@'192.168.10.%' identified '123456';

生产环境主从库用户授权

主库:

GRANT SELECT,INSERT,UPDATE,DELETE ON 'blog'.* TO 'blog'@'192.168.10.%' identified '123456';

从库:

GRANT SELECT ON 'blog'.* TO 'blog'@'192.168.10.%' identified '123456';

如何实现上述授权方案

最简单的方法是在主库配置binlog-ignore-db=mysql

2.忽略授权表的方式防止数据写从库的方法及实践

生产环境中一般采用忽略授权表的方式同步,然后对从服务器(slave)上的用户仅授权select读权限,不同步mysql库,这样我们就保证主库和从库相同的用户可以授权不同的权限。指定mysql库不同步。

忽略mysql和information_schema库的主从同步。

replicate-ignore-db=mysqlbinlog-ignore-db = mysqlbinlog-ignore-db = performance_schemabinlog-ignore-db = information_schema

提示:如何在主库上忽略mysql库的同步,方法:

(1)只有在[主从]库上分别设置replicate-ignore-db=mysql才可以做到从库不同步mysql库。

(2)在主库上设置binlog-ignore-db=mysql不记录有关mysql库更新的binlog来达到从库不同步mysql库。

3.通过read-only参数防止数据库写从库的方案

除了上面从库仅做SELECT的授权外,还可以在slave服务器启动选项增加参数或者在my.cnf配置文件中加read-only参数来确保从库只读,使用授权用户和read-only参数二者同时操作效果更佳。

注意read-only参数可以让slave服务器只允许来自slave服务器线程或具有SUPER权限的用户的更新。可以确保slave服务器不接受来自普通用户的更新。

(1)配置从库my.cnf配置文件mysqld下重启从数据库

[root@mysql ~]# egrep "\[mysqld]|read-only" /data/3307/my.cnf [mysqld]read-only[root@mysql ~]# /data/3307/mysql stopStoping MySQL....[root@mysql ~]# /data/3307/mysql startStarting MySQL......

(2)read-only参数对SUPER权限的用户无效,用SUPER用户登录创建一个普通用户

mysql> grant select,insert,update,delete on *.* to 'nana'@'localhost' identified by '123456';Query OK, 0 rows affected (0.00 sec)mysql> flush privileges;Query OK, 0 rows affected (0.00 sec)

(3)在school库中创建一个表退出用普通用户登录,在创建的表中插入一条记录,演示read-only的效果。

[root@mysql ~]# mysql -unana -p123456 -S /data/3307/mysql.sock Welcome to the MySQL monitor.  Commands end with ; or \g.Your MySQL connection id is 4Server version: 5.5.32 Source distributionCopyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> select user();+----------------+| user() |+----------------+| nana@localhost |+----------------+1 row in set (0.00 sec)mysql> use school;Database changedmysql> show tables;+------------------+| Tables_in_school |+------------------+| t|+------------------+1 row in set (0.00 sec)mysql> insert into t values(2);ERROR 1290 (HY000): The MySQL server is running with the --read-only option so it cannot execute this statement

(4)最后我们看一下是否能同步主库

主库中插入数据

[root@mysql ~]# mysql -uroot -p123456 -S /data/3306/mysql.sock <
use linzhongniao> insert into test1 values(4,'不认识'),(5,'你是谁');> exit> EOF

从库同步情况

[root@mysql ~]# mysql -unana -p123456 -S /data/3307/mysql.sock Welcome to the MySQL monitor.  Commands end with ; or \g.Your MySQL connection id is 4Server version: 5.5.32 Source distributionCopyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> select * from linzhongniao.test1;+----+-----------+| id | name  |+----+-----------+|  1 | 张三  ||  2 | 张三  ||  3 | 我是谁||  4 | 不认识||  5 | 你是谁|+----+-----------+5 rows in set (0.00 sec)

MySQL从库数据冲突导致同步停止

Show slave status报错

且show slave status\G

Slave_IO_Running: YesSlave_SQL_Running: NOSeconds_Behind_Master: NULLLast_Error:Error ‘Can’t create database ‘linzhongniao’;database exists’on query.Default database:’linzhongniao’.Query:‘create database linzhongniao’

解决方法:

方法一:

Stop slaveSet global sql_slave_skip_counter=1Start slave

(1)对于普通的互联网业务,忽略问题不是很大,当然要确认不影响公司业务的前提下。

(2)企业场景解决主从同步,比主从不一致对当前业务更重要。如果主从数据一致很重要找个时间恢复一下这个从库。

方法二:根据错误号跳过指定的错误

[root@mysql ~]# grep skip /data/3306/my.cnfskip-name-resolve 忽略名称解析解决mysql连接慢的问题。slave-skip-errors = 1032,1062 一般由于入库重复导致的失败就可以忽略。

当然也可以将slave-skip-errors的值设置为all,这样就会导致主从库数据同步数据缺失。我们可以参考mysql常见错误代码来设置我们想要忽略的错误号,还可以通过错误号解决mysql出现故障。

2.mysql常见错误代码

1005:创建表失败

1006:创建数据库失败

1007:数据库已存在,创建数据库失败<=================可以忽略

1008:数据库不存在,删除数据库失败<=================可以忽略

1009:不能删除数据库文件导致删除数据库失败

1010:不能删除数据目录导致删除数据库失败

1011:删除数据库文件失败

1012:不能读取系统表中的记录

1020:记录已被其他用户修改

1021:硬盘剩余空间不足,请加大硬盘可用空间

1022:关键字重复,更改记录失败

1023:关闭时发生错误

1024:读文件错误

1025:更改名字时发生错误

1026:写文件错误

1032:记录不存在<=============================可以忽略

1036:数据表是只读的,不能对它进行修改

1037:系统内存不足,请重启数据库或重启服务器

1038:用于排序的内存不足,请增大排序缓冲区

1040:已到达数据库的最大连接数,请加大数据库可用连接数

1041:系统内存不足

1042:无效的主机名

1043:无效连接

1044:当前用户没有访问数据库的权限

1045:不能连接数据库,用户名或密码错误

1048:字段不能为空

1049:数据库不存在

1050:数据表已存在

1051:数据表不存在

1054:字段不存在

1062:字段值重复,入库失败<==========================可以忽略

1065:无效的SQL语句,SQL语句为空

1081:不能建立Socket连接

1114:数据表已满,不能容纳任何记录

1116:打开的数据表太多

1129:数据库出现异常,请重启数据库

1130:连接数据库失败,没有连接数据库的权限

1133:数据库用户不存在

1141:当前用户无权访问数据库

1142:当前用户无权访问数据表

1143:当前用户无权访问数据表中的字段

1146:数据表不存在

1147:未定义用户对数据表的访问权限

1149:SQL语句语法错误

1158:网络错误,出现读错误,请检查网络连接状况

1159:网络错误,读超时,请检查网络连接状况

1160:网络错误,出现写错误,请检查网络连接状况

1161:网络错误,写超时,请检查网络连接状况

1169:字段值重复,更新记录失败

1177:打开数据表失败

1180:提交事务失败

1181:回滚事务失败

1203:当前用户和数据库建立的连接已到达数据库的最大连接数,请增大可用的数据库连接数或重启数据库

1205:加锁超时

1211:当前用户没有创建用户的权限

1216:外键约束检查失败,更新子表记录失败

1217:外键约束检查失败,删除或修改主表记录失败

1226:当前用户使用的资源已超过所允许的资源,请重启数据库或重启服务器

1227:权限不足,您无权进行此操作

1235:MySQL版本过低,不具有本功能

转载于:https://www.cnblogs.com/zywu-king/p/8563459.html

你可能感兴趣的文章
让sublime text2 支持中文路径的文件
查看>>
Objective-C 类,函数调用
查看>>
Linux常用命令
查看>>
golang fmt.printf()
查看>>
获取本周周一日期
查看>>
静态网站使用不蒜子显示浏览量
查看>>
将cocostudio配置到我们自己的Cocos2d-x开发环境中
查看>>
MonoTouch之根据经度纬度绘制线条
查看>>
win7卸载IE11
查看>>
python 中的字符和字符串
查看>>
广度遍历
查看>>
ecshop常用的修改内容
查看>>
对称的二叉树
查看>>
编译器的原理
查看>>
【解决】Windows Mobile 6 Professional SDK Refresh.msi 在xp上一直卡死
查看>>
C#Winform限制Textbox只能输入数字
查看>>
There is no getter for property named 'id' in 'class java.lang.Integer'
查看>>
一步步实现windows版ijkplayer系列文章之三——Ijkplayer播放器源码分析之音视频输出——音频篇...
查看>>
[笔记].如何使用Nios II Software Tools for Eclipse导入已有工程
查看>>
hdu Wooden Sticks
查看>>