美文网首页
Day02-p.m.-MySQL用户权限管理与单机多实例配置

Day02-p.m.-MySQL用户权限管理与单机多实例配置

作者: 驮着集装箱的鲸鱼 | 来源:发表于2019-06-22 14:50 被阅读0次

请思考:有以下3条SQL语句,oldboy@'10.0.0.%'最终能对t1表具备什么样的权限?

1. grant select,update on *.* to oldboy@'10.0.0.%';
2. grant delete on wordpress.* to  oldboy@'10.0.0.%';
3. grant insert on wordpress.t1 to  oldboy@'10.0.0.%';
----------------------------------------------------------------
答:oldboy@'10.0.0.%'对t1表拥有的权限为:select,update,delete,insert
因为在MySQL中的权限是可以继承的,多次授权是叠加的。
那么想取消授权或取消某个授权时改怎么做呢?
如果想要取消某个权限,必须通过回收(revoke)的方式实现,而不能多次重复授权。

查看授权:

3306 [(none)]>show grants for oldboy@'10.0.0.%';
+-------------------------------------------+
| Grants for oldboy@10.0.0.%                |
+-------------------------------------------+
| GRANT USAGE ON *.* TO 'oldboy'@'10.0.0.%' |
+-------------------------------------------+
1 row in set (0.09 sec)

增加一个超级管理员:

3306 [(none)]>grant all on *.* to oldboy@'10.0.0.%' identified by '123' with grant option;
Query OK, 0 rows affected, 1 warning (0.00 sec)
3306 [(none)]>show grants for oldboy@'10.0.0.%';
+----------------------------------------------------------------------+
| Grants for oldboy@10.0.0.%                                           |
+----------------------------------------------------------------------+
| GRANT ALL PRIVILEGES ON *.* TO 'oldboy'@'10.0.0.%' WITH GRANT OPTION |
+----------------------------------------------------------------------+
1 row in set (0.00 sec)

回收权限

3306 [(none)]>revoke all on zhihu.* from 'zhihu'@'10.0.0.%';
3306 [(none)]>show grants for zhihu@'10.0.0.%';
+------------------------------------------+
| Grants for zhihu@10.0.0.%                |
+------------------------------------------+
| GRANT USAGE ON *.* TO 'zhihu'@'10.0.0.%' |
+------------------------------------------+
1 row in set (0.00 sec)

\color{#ea4335}{面试题:}
1. 开发人员找DBA开用户,需要和开发人员沟通什么?

(1)你要做哪些权限操作
(2)你要从什么地址(IP地址)来登录数据库
(3)要对什么对象(库,表)进行管理操作

2. 开发人员私下找DBA要管理员(root)用户的密码(也就是root权限),作为DBA你怎么处理?(金融公司)
情况1:(正规公司,有明显的规章制度)

(1)不给
(2)在金融公司严令禁止,一旦发现立马举报!!!

情况2:(小公司,没有规章制度)

root权限是乱用的,这个时候要学会保护自己,谁要root权限,就把责任给谁。
可以提意见,生成流程,规章制度。

3. MySQL连接管理

3.1 自带的客户端连接工具

mysql命令参数常用用法:
参数:(-u、-p、-h、-P、-S、-e、<)
-u 用户名
-p 密码

[root@db01 ~]# mysql -uroot -p
Enter password:

-S socket文件连接方式

[root@db01 ~]# mysql -uroot -p -S /tmp/mysql.sockEnter password:

-h #=====>>
>>>>>>>>>>>>>>TCP/IP连接方式
-P #=====>>

[root@db01 ~]# mysql -uroot -p -h10.0.0.51 -P3306  #<==连接时用户必须存在
Enter password:

思考:连接时,既指定了本地连接,又指定了TCP/IP连接,它会选谁呢?

答:数据库连接时,优先选择TCP/IP连接

-e :在命令行非交互式执行SQL语句

[root@db01 ~]# mysql -uroot -p123 -h10.0.0.51 -e "show databases;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| zhihu              |
+--------------------+

<:把文件内的数据库登录密码重定向给mysql -uroot -p

[root@db01 ~]# mysql -uroot -p < world.sql 
Enter password: 
[root@db01 ~]# mysql -uroot -p123 -h10.0.0.51 -e "show databases;"
mysql: [Warning] Using a password on the command line interface can be insecure.
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
| world              |
| zhihu              |
+--------------------+

如何证明你的数据库是可用的,可连接的?
1. 证明数据库的端口和进程号是存在的,存在证明数据库是正常启动的。

[root@db01 ~]# netstat -lntup|grep mysqld
tcp6       0      0 :::3306                 :::*                    LISTEN      11774/mysqld        
[root@db01 ~]# lsof -i :3306
COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mysqld  11774 mysql   30u  IPv6  62541      0t0  TCP *:mysql (LISTEN)

2. 验证用户远程连接是否正常

[root@db01 ~]# mysql -uroot -p -h 10.0.0.51
Enter password:

3.2 远程的客户端连接工具

使用navicatsqlyog,此处略…………

4. MySQL 启动方式介绍

辅助脚本方式(普通的启动关闭)
(1)sys-v启动方式:把mysql.server复制到/etc/init.d/mysqld

启动方式1:/etc/init.d/mysqld
启动方式2:service mysqld start

(2)systemd启动方式:把mysql.server复制到/etc/systemd/system/mysqld.service

启动方式1:/etc/systemd/system/mysqld.service
启动方式2:systemctl start mysqld

以上这两种辅助启动方式的最终目的都是为了把“mysqld”给启动起来,那么它们的执行过程是怎样的呢?如下:

(1)sys-v启动方式:执行service msyql start 时,会启用/application/mysql/bin/mysqld_safe,然后启用/application/mysql/bin/mysqld
这样用的原因是:当我们的数据库异常宕机后,如果Mysql_safe检测到,会自动再启动mysqld一次。
但是,如果是真实的生产场景中发生了这种情况,不要立即启动数据库,一定要先对数据进行备份,然后再想办法启动数据库。
(2)systemd启动方式:执行systemctl start mysqld时,会直接调用/application/mysql/bin/mysqld

维护性的启动方式:

什么是维护性(临时)的启动方式?
平时出了问题或故障,或需要临时性变更,这个时候就需要临时启动一下,然后加一些参数或是维护性的动作。比如说忘记密码了,就需要通过“/application/msyql/bin/mysqld_safe --skip-grant-tables --skip-networking &”,这就是一种维护性(临时)的启动方式。
还有/application/mysql/bin/mysqld &也是维护性(临时)的启动方式 

5. MySQL 初始化配置(数据库启动之前)

5.1 预编译时进行设置(略)

只能在编译安装中实现
预编译:硬编码配置到程序中

5.2 初始化配置文件(my.cnf)

5.2.1 初始化配置文件的默认读取位置

[root@db01 ~]# mysqld --help --verbose| grep "my.cnf"
/etc/my.cnf /etc/mysql/my.cnf /usr/local/mysql/etc/my.cnf ~/.my.cnf (读取优先级从后往前)
                      (忽略这一行)my.cnf, $MYSQL_TCP_PORT, /etc/services, built-in default
指定默认读取配置文件参数
--defaults-file=/opt/my.cnf
执行方式:
mysqld_safe --defaults-file=/opt/my.cnf &
mysqld --defaults-file=/opt/my.cnf &

5.3 命令行模式

5.4 初始化配置文件的应用

5.4.1 初始化配置文件(my.cnf)的作用

可以影响到数据库的启动
启动方式:mysqld、msysqld_safe
客户端的连接:mysql、mysqldump、mysqladmin

5.4.1 书写格式

[程序名]
配置项=xxx
配置项=xxx
…………
(只要是支持的,都可以写)

服务端
[server](包含以下两种)
[mysqld]
[mysqld_safe]

客户端
[client]
[mysql]
[mysqldump]

5.4.3 MySQL初始化配置的常用参数

通用型配置文件:(以下配置都是生产环境中必开的)
[mysql](服务端)#改服务端必须重启生效
user=mysql 管理用户用户名
basedir=/application/mysql 
datadir=/data/mysql/data
socket=/tmp/msyql.sock
server_id=6(1-65536)服务序号
port=3306
log_error=/data/mysql/data/mysql.log
log_bin=/data/mysql/data/mysql-bin  #>>二进制文件位置+文件名前缀,该日志是
[mysql] #客户端
socket=/tmp/mysql.sock
#以上信息都可以去官网参考,my.cnf的写法(https://dev.mysql.com/doc/refman/5.7/en/option-files.html)

5.5 MySQL 多实例(多个不同的端口)

准备3个实例

5.5.1

[root@db01 /data]# mkdir -p /data/330{7,8,9}/data
[root@db01 ~]# cd /data/
[root@db01 /data]# ls
3307  3308  3309  mysql

5.5.2 准备配置文件

cat > /data/3307/my.cnf <<EOF
[mysqld]
basedir=/application/mysql
datadir=/data/3307/data
socket=/data/3307/mysql.sock
log_error=/data/3307/mysql.log
port=3307
server_id=7
log_bin=/data/3307/mysql-bin
EOF

cat > /data/3308/my.cnf <<EOF
[mysqld]
basedir=/application/mysql
datadir=/data/3308/data
socket=/data/3308/mysql.sock
log_error=/data/3308/mysql.log
port=3308
server_id=8
log_bin=/data/3308/mysql-bin
EOF

cat > /data/3309/my.cnf <<EOF
[mysqld]
basedir=/application/mysql
datadir=/data/3309/data
socket=/data/3309/mysql.sock
log_error=/data/3309/mysql.log
port=3309
server_id=9
log_bin=/data/3309/mysql-bin
EOF

5.5.3 初始化三套数据

mv /etc/my.cnf /etc/my.cnf.bak
mysqld --initialize-insecure  --user=mysql --datadir=/data/3307/data --basedir=/application/mysql
mysqld --initialize-insecure  --user=mysql --datadir=/data/3308/data --basedir=/application/mysql
mysqld --initialize-insecure  --user=mysql --datadir=/data/3309/data --basedir=/application/mysql

5.5.4 systemd管理多实例

cd /etc/systemd/system
cp mysqld.service mysqld3307.service
cp mysqld.service mysqld3308.service
cp mysqld.service mysqld3309.service

vim mysqld3307.service
ExecStart=/application/mysql/bin/mysqld  --defaults-file=/data/3307/my.cnf
vim mysqld3308.service
ExecStart=/application/mysql/bin/mysqld  --defaults-file=/data/3308/my.cnf
vim mysqld3309.service
ExecStart=/application/mysql/bin/mysqld  --defaults-file=/data/3309/my.cnf

5.5.5 授权

chown -R mysql.mysql /data/*

5.5.6 启动

systemctl start mysqld3307.service
systemctl start mysqld3308.service
systemctl start mysqld3309.service

5.5.7 验证多实例

netstat -lnp|grep 330
mysql -S /data/3307/mysql.sock -e "select @@server_id"
mysql -S /data/3308/mysql.sock -e "select @@server_id"
mysql -S /data/3309/mysql.sock -e "select @@server_id"

成功后的显示

[root@db01 ~]# mysql -S /data/3307/mysql.sock -e "select @@server_id"+-------------+
| @@server_id |
+-------------+
|           7 |
+-------------+
[root@db01 ~]# mysql -S /data/3308/mysql.sock -e "select @@server_id"+-------------+
| @@server_id |
+-------------+
|           8 |
+-------------+
[root@db01 ~]# mysql -S /data/3309/mysql.sock -e "select @@server_id"+-------------+
| @@server_id |
+-------------+
|           9 |
+-------------+

停止

systemctl stop mysqld3308.service

相关文章

网友评论

      本文标题:Day02-p.m.-MySQL用户权限管理与单机多实例配置

      本文链接:https://www.haomeiwen.com/subject/yekpfctx.html