Mysql常用管理操作语句,以下操作均在mysql8.0
下执行
用户操作
基本操作
使用root用户登录,运行以下命令
# 创建一个名为`test`密码为`1234`的用户:
create user test identified by '1234';
# 查询用户以及host
select user,host from mysql.user;
# 修改用户允许登录的主机
# % 代表所有主机
# localhost 代表只能在本机登录
# 192.168.1.1 代表只能在192.168.1.1这个ip登录
update mysql.user set host = 'localhost' where user = 'test';
# 修改用户密码
alter user 'test'@'localhost' identified by 'pswd';
# 重命名用户
rename user test to test1;
# 删除用户test
drop user 'test'@'localhost';
权限操作
查询用户权限
# 查询当前用户权限
show grants;
# 查询其他用户权限
show grants for test;
select * from mysql.user where user='test';
授予用户权限
# 授予用户权限。
grant privilegesCode on dbName.tableName to username@host;
# 撤销用户权限。
revoke privilegesCode on dbName.tableName from username@host;
dbName.tableName
表示授予权限的具体库和表
username@host
表示授予的用户以及允许该用户登录的IP地址。
flush privileges
表示刷新权限变更。
privilegesCode
表示权限类型,可以授予或撤销的每个权限如下
权限 | 说明(无说明则默认字面意义) |
ALL | 除GRANT OPTION外的所有权限 |
ALTER | |
ALTER ROUTINE | 使用ALTER PROCEDURE和DROPPROCEDURE |
CREATE | |
CREATE TEMPORARY TABLES | |
CREATE USER | 使用CREATE USER、DROP USER、RENAME USER和REVOKE ALL PRIVILEGES |
CREATE VIEW | |
DELETE | |
DROP | |
EXECUTE | 使用CALL和存储过程 |
FILE | 使用SELECT INTO OUTFILE和LOAD DATA INFILE |
GRANT OPTION | 使用GRANT和REVOKE |
INDEX | 使用CREATE INDEX和DROP INDEX |
INSERT | |
LOCK TABLES | |
PROCESS | 使用SHOW FULL PROCESS LIST |
RELOAD | 使用FLUSH |
REPLICATION CLIENT | 服务器位置的访问 |
REPLICATION SLAVE | 由复制丛书使用 |
SELECT | |
SHOW DAYABASES | |
SHOW VIEW | 使用SHOW CREATE VIEW |
SHUTDOWN | 使用mysqladmin shutdown(用来关闭MySQL) |
SUPER | 使用CHANGE MASTER、KILL、LOGS、PURGE、MASTER和SET GLOBAL。还允许mysqladmin调试登录 |
UPDATE | |
USAGE | 无访问权限 |
注意事项
grant
,revoke
用户权限后,该用户只有重新连接数据库,权限才能生效。如果想让授权的用户,也可以将这些权限grant
给其他用户,需要选项 grant option
grant select on testdb.* to dba@localhost with grant option;
数据库维护
# ANALYZE TABLE用来检查表键是否正确
mysql> analyze table users;
+-----------------------+---------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+-----------------------+---------+----------+----------+
| test.users | analyze | status | OK |
+-----------------------+---------+----------+----------+
# CHECK TABLE 用来针对许多问题对标进行检查
# CHANGED 检查自最后一次检查以来改动过的表
# EXTENDED 检查所有被删除的连接并进行键检验
# QUICK 只进行快速扫描
mysql> check table users,orders extended;
+-------------------------+-------+----------+----------+
| Table | Op | Msg_type | Msg_text |
+-------------------------+-------+----------+----------+
| test.users | check | status | OK |
| test.orders | check | status | OK |
+-------------------------+-------+----------+----------+
如果从一个表中删除大量数据,应该使用OPTIMIZE TABLE
来收回所用的控件,从而优化表的性能
诊断启动问题
--help
显示帮助--safe-mode
装在减去某些最佳配置的服务器--verbose
显示全文本消息--version
显示版本信息然后退出
查看日志文件
- 错误日志。它包含启动和关闭问题以及任意关键错误的细节。此日志通常名为
hostname.err
,位于data目录。此日志可用--log-error
命令行选项更改。 - 查询日志。它记录所有MySQL活动,在诊断问题时非常有用。此日志文件可能会很快地变得非常大,一次不应该长期使用它。此日治通常名为
hostname.log
,位于data
目录中。此名字可以用--log
命令行选项更改 - 二进制日志。他记录更新过数据(或者可能更新过数据)的所有语句。此日治通常名为
hostname-bin
,位于data
目录内。此名字可以用--log-bin
命令行选项更改 - 缓慢查询日志。此日治记录执行缓慢的任何查询。这个日志在确定数据库何处需要优化很有用。此日志通常名为
hostname-slow.log
。此名字可以用--log-slow-queries
命令行选项更改
使用日志时,可用FLUSH LOGS
语句来刷新和重新开始所有日志文件
备份和还原
mysqldump
是mysql
自带的逻辑备份工具。它的备份原理是通过协议连接到mysql数据库,将需要备份的数据查询出来,将查询出的数据转换成对应的insert
语句,当我们需要还原这些数据时,只要执行这些insert
语句,即可将对应的数据还原。
备份
命令格式如下:
mysqldump [选项] 数据库名 [表名] > 脚本名
mysqldump [选项] --数据库名 [选项 表名] > 脚本名
mysqldump [选项] --all-databases [选项] > 脚本名
参数名 | 缩写 | 含义 |
–host | -h | 服务器地址 |
–port | -P | 服务器端口号 |
–user | -u | mysql用户名 |
–password | -p | mysql密码 |
–databases | 指定要备份的数据库 | |
–compact | 压缩模式,产生更少输出 | |
–comments | 添加注释信息 | |
–complete-insert | 输出完成的插入语句 | |
–lock-tables | 备份前,锁定所有数据库表 | |
–no-create-db/–no-create-info | 禁止生成创建数据库语句 | |
–force | 当出现错误是仍然继续备份操作 | |
–default-character-set | 指定默认字符集 | |
–add-locks | 备份时锁定数据库表 |
还原
# 系统行命令
mysqladmin -uroot -p create db_name
mysql -uroot -p db_name < /backup/mysqldump/db_name.db
注:在导入备份数据库前,db_name如果没有,是需要创建的; 而且与db_name.db中数据库名是一样的才可以导入。
# soure 方法
use db_name
source /backup/mysqldump/db_name.db
查看容量
# 查看所有数据库容量大小
select
table_schema as '数据库',
sum(table_rows) as '记录数',
sum(truncate(data_length/1024/1024, 2)) as '数据容量(MB)',
sum(truncate(index_length/1024/1024, 2)) as '索引容量(MB)'
from information_schema.tables
group by table_schema
order by sum(data_length) desc, sum(index_length) desc;
# 查看所有数据库各表容量大小
select
table_schema as '数据库',
table_name as '表名',
table_rows as '记录数',
truncate(data_length/1024/1024, 2) as '数据容量(MB)',
truncate(index_length/1024/1024, 2) as '索引容量(MB)'
from information_schema.tables
order by data_length desc, index_length desc;
# 查看指定数据库容量大小
select
table_schema as '数据库',
sum(table_rows) as '记录数',
sum(truncate(data_length/1024/1024, 2)) as '数据容量(MB)',
sum(truncate(index_length/1024/1024, 2)) as '索引容量(MB)'
from information_schema.tables
where table_schema='mysql';
改善性能
# 查看当前设置
mysql>SHOW VARIABLES;
mysql>SHOW STATUS;
# 查看活动进程,可以使用KILL终结某个进程
mysql>SHOW PROCESSLIST;
# 使用EXPLAIN让MySQL解释它如何执行一条SQL语句
mysql> explain select * from test.users;
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+
| 1 | SIMPLE | users | NULL | ALL | NULL | NULL | NULL | NULL | 145 | 100.00 | NULL |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------+