首页 > 技术文章 > 第七章 Mysql数据库管理

jhno1 2020-10-27 14:46 原文

一、用户权限管理

1.授权的命令

# 普通授权
grant all on *.* to root@'172.16.1.%' identified by '123';

# 权限传递给第三方
grant all on *.* to root@'172.16.1.%' identified by '123' with grant option;

2.作用对象

grant all on *.* to root@'172.16.1.%' identified by '123';          #所有库下的所有表
grant all on mysql.* to root@'172.16.1.%' identified by '123';		#mysql库下的所有表,单库授权
grant all on mysql.user to root@'172.16.1.%' identified by '123';	#单表授权

#单列授权,企业称之为脱敏,脱敏:脱离敏感信息
1.普通用户只能查看用户名字
	mysql> grant select(user) on mysql.user to diaosi@'172.16.1.%' identified by '123';
2.VIP用户可以查看用户用户较多的信息
	mysql> grant select(user,host) on mysql.user to diaosi@'172.16.1.%' identified by '123';
3.超级VIP可以查看用户所有的信息
	mysql> grant select on mysql.user to diaosi@'172.16.1.%' identified by '123';

3.在企业里一般我们怎么给权限

#开发要一个用户登录数据库
1.跟开发沟通:
	1)你要操作的是哪个库哪个表
	2)你要对这个表进行哪些操作
	3)你从哪个IP连过来
	4)你对用户名的要求
	5)你对密码有什么要求
	6)你的用户要用多久
	7)发邮件
2.一般怎么授权
	grant select,insert,update on mysql.* to dev@'172.16.1.51' identified by 'Dev@123456';
3.开发要root用户怎么办?

4.权限实践

1)准备数据库

#创建wordpress数据库
create database wordpress;
#使用wordpress库
use wordpress;
#创建t1、t2表
create table t1 (id int);
create table t2 (id int);

#创建blog库
create database blog;
#使用blog库
use blog;
#创建t1表
create table tb1 (id int);

2)授权

#授权wordpress@'10.0.0.5%'这个用户对所有库所有表有查询权限,密码是123
#授权wordpress可以通过10.0.0.5%这个网段连接数据库对所有库所有表有查询权限,密码是123
1.grant select on *.* to wordpress@'10.0.0.5%' identified by '123';

#授权wordpress@'10.0.0.5%'对wordpress库下的所有表有增删改的权限,密码是123
#授权wordpress可以通过10.0.0.5%这个网段连接数据库对wordpress库下的所有表有增删改的权限,密码是123
2.grant insert,delete,update on wordpress.* to wordpress@'10.0.0.5%' identified by '123';

#授权wordpress@'10.0.0.5%'对wordpress下面的t1表有所有权限,密码是123
3.grant all on wordpress.t1 to wordpress@'10.0.0.5%' identified by '123';

3)请问

一个客户端程序使用wordpress用户登陆到10.0.0.51的MySQL后,
1.对t1表的管理能力?			#所有权限
2.对t2表的管理能力?			#增删改查
3.对tb1表的管理能力?			#只有查

4)授权总结

1.不同级别授权,权限是相加关系
2.不推荐在多级别定义重复的权限
3.常见的授权方式是单库授权
	grant select,insert,update on mysql.* to dev@'172.16.1.51' identified by 'Dev@123456';
4.如果涉及到用户的敏感信息,可以使用脱敏,单列授权
5.查看用户的权限
	mysql> show grants for root@'172.16.1.%';

二、MySQL连接管理

1.连接工具

1)MySQL自带的客户端命令

#自带的命令 mysql
-u:		指定用户		mysql -uroot
-p:		指定密码		mysql -uroot -p123
-h:		指定主机		mysql -uroot -p123 -h172.16.1.51
-P:		指定端口		mysql -uroot -p123 -P3307 -h172.16.1.51
-S:		指定sock		  mysql -uroot -p123 -S /tmp/mysql.sock
-e:		指定SQL		  mysql -uroot -p123 -e "show databases"
#--protocol=name:指定连接方式

2)第三方客户端工具

1.Navicat
2.SQLyog

2.连接方式

1)socket连接

mysql -uroot -p123
mysql -uroot -p123 -S /tmp/mysql.sock

2)TCP/IP连接

mysql -uroot -p123 -h172.16.1.51

三、MySQL启动关闭流程

1.启动数据库

1./etc/init.d/mysqld start  --->  mysqld_safe  --->  mysqld 

2.systemctl start mysqld  --->  mysqld_safe  --->  mysqld

3.mysqld_safe --defaults-file=/etc/my.cnf &  --->  mysqld_safe  --->  mysqld

2.关闭数据库

#推荐的方式:
1./etc/init.d/mysqld stop
2.systemctl stop mysqld
3.mysqladmin shutdown
4.service mysql stop

#不推荐的方式:
1.kill -9 mysqlpid
2.pkill mysqld
3.killall mysqld
#错误关闭会导致:
1.数据丢失
2.数据库启动故障

四、MySQL配置管理

1.配置mysql的方法

1.编译的时候
#程序存放位置
cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.6.38 \
#数据存放位置
-DMYSQL_DATADIR=/application/mysql-5.6.38/data \
#socket文件存放位置
-DMYSQL_UNIX_ADDR=/application/mysql-5.6.38/tmp/mysql.sock \
... ...

2.初始化
/mysql_install_db --defaults-file=/service/3309/my.cnf --user=mysql --basedir=/service/mysql --datadir=/service/3309/data

--datadir=/application/mysql/data
--basedir=/application/mysql
--defaults-file=/etc/my.cnf
--pid-file=/application/mysql/data/db01.pid
--socket=/application/mysql/data/mysql.sock
--user=mysql
--port=3306
--log-error=/application/mysql/data/db01.err

3.配置文件
/etc/my.cnf
/etc/mysql/my.cnf
$basedir/my.cnf
~/my.cnf

#defaults-extra-file (类似include)

2.数据库配置文件

1)配置文件都有哪些

/etc/my.cnf
/etc/mysql/my.cnf
$basedir/my.cnf
~/.my.cnf

2)配置文件的读取顺序

/etc/my.cnf
/etc/mysql/my.cnf
$basedir/my.cnf
~/.my.cnf

3)配置文件生效顺序

~/.my.cnf
$basedir/my.cnf
/etc/mysql/my.cnf
/etc/my.cnf

4)测试配置文件生效顺序

#1.配置/etc/my.cnf
[root@db02 ~]# vim /etc/my.cnf
[mysqld]
server_id=1

#2.配置/etc/mysql/my.cnf
[root@db02 ~]# vim /etc/mysql/my.cnf
[mysqld]
server_id=2

#3.配置$basedir/my.cnf
[root@db02 ~]# vim /service/mysql/my.cnf 
[mysqld]
server_id=3

#4.配置~/my.cnf
[root@db02 ~]# vim ~/.my.cnf
[mysqld]
server_id=4

#5.重启数据库
[root@db02 ~]# systemctl stop mysqld
[root@db02 ~]# /etc/init.d/mysqld start
Starting MySQL. SUCCESS!

#6.查看server_id
[root@db02 ~]# mysql -uroot -p123456 -e "show variables like 'server_id'"
Warning: Using a password on the command line interface can be insecure.
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 4     |
+---------------+-------+

#7.删除生效的配置重启,再次查看id
[root@db02 ~]# rm -rf ~/.my.cnf
[root@db02 ~]# /etc/init.d/mysqld restart
[root@db02 ~]# mysql -uroot -p123456 -e "show variables like 'server_id'"
Warning: Using a password on the command line interface can be insecure.
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 3     |
+---------------+-------+

#8.删除生效的配置重启,再次查看id
[root@db02 ~]# rm -rf /service/mysql/my.cnf
[root@db02 ~]# /etc/init.d/mysqld restart
[root@db02 ~]# mysql -uroot -p123456 -e "show variables like 'server_id'"
Warning: Using a password on the command line interface can be insecure.
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 2     |
+---------------+-------+

#9.删除生效的配置重启,再次查看id
[root@db02 ~]# rm -rf /etc/mysql/my.cnf
[root@db02 ~]# /etc/init.d/mysqld restart
Shutting down MySQL.. SUCCESS! 
Starting MySQL.. SUCCESS! 
[root@db02 ~]# mysql -uroot -p123456 -e "show variables like 'server_id'"
Warning: Using a password on the command line interface can be insecure.
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| server_id     | 1     |
+---------------+-------+

3.执行参数优先级

1)socket文件指定位置

#cmake:socket=/application/mysql/tmp/mysql.sock#命令行:--socket=/tmp/mysql.sock#配置文件:/etc/my.cnf 中[mysqld]标签下:socket=/opt/mysql.sock#default参数:--defaults-file=/tmp/a.txt 配置文件中[mysqld]标签下:socket=/tmp/test.sock

2)测试优先级

#1.启动MySQL,查看sock文件位置[root@db02 ~]# mysqld_safe --defaults-file=/tmp/a.txt --socket=/tmp/mysql.sock &[root@db02 ~]# ll /tmp/srwxrwxrwx 1 mysql mysql         0 Oct 22 18:58 mysql.sock#2.启动MySQL,查看sock文件位置[root@db02 ~]# mysqld_safe --defaults-file=/tmp/a.txt &[root@db02 ~]# ll /tmp/srwxrwxrwx 1 mysql mysql         0 Oct 22 19:01 test.sock#如果设置--defaults-file,那么MySQL启动时只读取指定的配置文件#3.启动MySQL,查看sock文件位置[root@db02 ~]# mysqld_safe &[root@db02 ~]# ll /opt/srwxrwxrwx 1 mysql mysql 0 Oct 22 19:03 mysql.sock

4.优先级总结

#优先级排序命令行  >  --defaults-file参数指定配置  >  ~/.my.cnf  >  $basedir/my.cnf  >  /etc/mysql/my.cnf  >  /etc/my.cnf  >  初始化配置   >  cmake

5.配置文件作用

1)作用

1.影响客户端的连接2.影响服务端的启动

2)影响客户端的连接

[root@db02 ~]# vim /etc/my.cnf#配置文件添加连接数据库信息的配置[mysql]user=rootpassword=123456

3)影响服务端的启动

#修改server_id[root@db02 ~]# vim /etc/my.cnf[mysqld]server_id=2#查看配置没有生效[root@db02 ~]# mysql -e "show variables like 'server_id'"+---------------+-------+| Variable_name | Value |+---------------+-------+| server_id     | 1     |+---------------+-------+#重启数据库后,修改的服务端配置才会生效[root@db02 ~]# systemctl restart mysqld [root@db02 ~]# mysql -e "show variables like 'server_id'"+---------------+-------+| Variable_name | Value |+---------------+-------+| server_id     | 2     |+---------------+-------+

4)总结

1.客户端配置受配置文件影响2.客户端配置修改后不需要重启服务			[mysql] 或者 [client]3.服务端配置修改后需要重启服务后生效		   [mysqld] 或者 [server]4.常见配置[root@db02 ~]# vim /etc/my.cnf[mysqld]server_id=2socket=/tmp/mysql.sock[mysql]socket=/tmp/mysql.sock

五、MySQL的命令

1.mysql内部快捷命令

\c:		终止正在输入的命令	\r:		重新连接数据库	\d:		修改sql语句结束符	\e:		输出输入的内容\G:		以key:values形式展示数据\q:		退出数据库	\g:		结束语句	\h: 	查看帮助	\T:		输出一个文件记录操作	\t:		终止记录操作的文件	\p:		打印输入的命令	\R:		 临时修改命令提示符\.		导入sql语句,等于 source 命令	\s:		查看数据库连接状态\!:		在数据库里执行命令行命令\u		切换数据库,等于 use 命令

2.help命令

#查看数据库内命令语法mysql> helpmysql> help create databasemysql> help create tablemysql> help select

2.客户端mysqladmin命令

1)设置密码

#1.设置密码
[root@db02 ~]# mysqladmin -uroot password
New password: 
Confirm new password:

#2.修改密码
[root@db02 ~]# mysqladmin -uroot -p password
Enter password: 
New password: 
Confirm new password:

2)关闭服务

[root@db02 ~]# mysqladmin -uroot -p shutdown 
Enter password: 123

3)库外建库

[root@db02 ~]# mysqladmin -uroot -p123 create database222222

4)库外删库

[root@db02 ~]# mysqladmin -uroot -p123 drop database222222
Warning: Using a password on the command line interface can be insecure.
Dropping the database is potentially a very bad thing to do.
Any data stored in the database will be destroyed.

Do you really want to drop the 'database222222' database [y/N] y
Database "database222222" dropped

5)查看数据库配置

[root@db02 ~]# mysqladmin -uroot -p123 variables | grep -w server_id

6)检测数据库是否启动

[root@db02 ~]# mysqladmin -uroot -p ping
Enter password: 
mysqld is alive

7)查看数据库信息

[root@db02 ~]# mysqladmin -uroot -p123 statusWarning: Using a password on the command line interface can be insecure.Uptime: 130  Threads: 1  Questions: 94  Slow queries: 0  Opens: 70  Flush tables: 1  Open tables: 63  Queries per second avg: 0.723Slow queries: 0Queries per second avg: 0.723

8)刷新授权表

[root@db02 ~]# mysqladmin -uroot -p123 reload

9)刷新binlog

[root@db02 ~]# mysql -uroot -p123 -e "show master status"
Warning: Using a password on the command line interface can be insecure.
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      120 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

#刷新binlog
[root@db02 ~]# mysqladmin -uroot -p123 flush-logs 
Warning: Using a password on the command line interface can be insecure.

#再次查看binlog
[root@db02 ~]# mysql -uroot -p123 -e "show master status"
Warning: Using a password on the command line interface can be insecure.
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000002 |      120 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

推荐阅读