MySQL(二)-运维操作(一)
参考文献
客户端操作
- 展示告警信息
SHOW WARNINGS\G
连接相关
-
MySQL的最大连接数在5.7版本中默认是
151
, 最大可以达到16384().如何设置最大连接数在于你的服务器性能-
查看 MYSQL连接数信息命令
1
mysql> show variables like '%max_connections%';
-
查询当前数据库已建立连接数
1
mysql> show status like 'Threads_connected';
配置 含义 Connections
尝试连接mysql的连接数,不管连接成功与否,该值都会+1 Threads_connected
已经建立的连接数,单节点下一般小于最大连接池最大连接数 max_connections
MySQL限制的最大的可连接的数量 wait_timeout
即MySQL长连接(非交互式)的最大生命时长,默认为8小时 interactive_timeout
长连接(交互式)的最大生命时长,默认是8小时 -
展示当前进程列表
-
SHOW PROCESSLIST;/SHOW FULL PROCESSLIST
或者SELECT * FROM information_schema.PROCESSLIST;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30mysql> SHOW PROCESSLIST;
+----+-----------------+--------------------+------+---------+------+------------------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+-----------------+--------------------+------+---------+------+------------------------+------------------+
| 5 | event_scheduler | localhost | NULL | Daemon | 6854 | Waiting on empty queue | NULL |
| 9 | root | 158.33.120.50:56237 | test | Sleep | 5753 | | NULL |
| 10 | root | 158.33.120.50:56291 | test | Sleep | 5753 | | NULL |
| 11 | root | 158.33.120.50:56313 | test | Sleep | 6533 | | NULL |
| 13 | root | 158.33.120.50:58336 | test | Sleep | 1164 | | NULL |
| 14 | root | 158.33.120.50:58337 | test | Sleep | 579 | | NULL |
| 16 | root | 158.33.120.50:58542 | test | Sleep | 526 | | NULL |
| 17 | root | 158.33.120.50:58553 | test | Query | 0 | init | SHOW PROCESSLIST |
+----+-----------------+--------------------+------+---------+------+------------------------+------------------+
8 rows in set (0.02 sec)
-- Info 表明当前正在进行的工作.如果展示的是查询语句,表明该语句正在执行;如果值是NULL,表明线程正在休眠,并等待下一条用户命令.
mysql> SELECT * FROM information_schema.PROCESSLIST;
+----+-----------------+--------------------+------+---------+------+------------------------+----------------------------------------------+
| ID | USER | HOST | DB | COMMAND | TIME | STATE | INFO |
+----+-----------------+--------------------+------+---------+------+------------------------+----------------------------------------------+
| 16 | root | 58.33.120.50:58542 | test | Sleep | 768 | | NULL |
| 9 | root | 58.33.120.50:56237 | test | Sleep | 5995 | | NULL |
| 17 | root | 58.33.120.50:58553 | test | Query | 0 | executing | select * from information_schema.processlist |
| 10 | root | 58.33.120.50:56291 | test | Sleep | 5995 | | NULL |
| 11 | root | 58.33.120.50:56313 | test | Sleep | 6775 | | NULL |
| 13 | root | 58.33.120.50:58336 | test | Sleep | 1406 | | NULL |
| 5 | event_scheduler | localhost | NULL | Daemon | 7096 | Waiting on empty queue | NULL |
| 14 | root | 58.33.120.50:58337 | test | Sleep | 821 | | NULL |
+----+-----------------+--------------------+------+---------+------+------------------------+----------------------------------------------+
8 rows in set (0.06 sec)- Id列,用户登录mysql时,系统分配的"connection_id",可以使用函数connection_id()查看
- User列,显示当前用户.如果不是root,这个命令就只显示用户权限范围的sql语句
- Host列,显示这个语句是从哪个ip的哪个端口上发的,可以用来跟踪出现问题语句的用户
- Db列,显示这个进程目前连接的是哪个数据库
- Command列,显示当前连接的执行的命令,一般取值为休眠(sleep),查询(query),连接(connect)等
- Time列,显示这个状态持续的时间,单位是秒
- State列,显示使用当前连接的sql语句的状态,很重要的列.state描述的是语句执行中的某一个状态.一个sql语句,以查询为例,可能需要经过
copying to tmp table、sorting result、sending data
等状态才可以完成 - Info列,显示这个sql语句,是判断问题语句的一个重要依据
展示MySQL服务器启动了多长时间,单位秒
1 | mysql> SHOW GLOBAL STATUS LIKE 'uptime'; |
监控InnoDB
1 | mysql> SHOW ENGINE INNODB STATUS \G |
- innodb_locks表在8.0.13版本中由performance_schema.data_locks表所代替,innodb_lock_waits表则由performance_schema.data_lock_waits表代替.(保存以获取的锁和等待的锁的信息)
Innodb_trx
(保存正在执行的事务的信息)
information_schema
中的表
表名 | 作用 |
---|---|
INNODB_TRX |
包含当前运行的所有事务的列表 |
performance_schema
中的表
表名 | 作用 |
---|---|
INNODB_LOCKS |
包含事务持有的当前锁的相关信息以及每个事务等待的锁的信息 |
INNODB_LOCK_WAITS |
包含事务正在等待的锁的信息 |
-
调试并发问题时有用的典型的
information_schema
表查询-
关于事务正在等待的所有锁的信息
SELECT * FROM INNODB_LOCK_WAITS;
-
阻塞的事务列表
1
SELECT * FROM performance_schema.data_locks WHERE ENGINE_LOCK_ID IN (SELECT BLOCKING_ENGINE_LOCK_ID FROM performance_schema.data_lock_waits);
-
特定表上的锁的列表
1
2
3
4
5
6
7
8
9
10
11
12
13SELECT * FROM performance_schema.data_locks WHERE OBJECT_NAME='table_name';
+--------+----------------------------------------+-----------------------+-----------+----------+---------------+-------------+----------------+-------------------+------------+-----------------------+-----------+---------------+-------------+-----------+
| ENGINE | ENGINE_LOCK_ID | ENGINE_TRANSACTION_ID | THREAD_ID | EVENT_ID | OBJECT_SCHEMA | OBJECT_NAME | PARTITION_NAME | SUBPARTITION_NAME | INDEX_NAME | OBJECT_INSTANCE_BEGIN | LOCK_TYPE | LOCK_MODE | LOCK_STATUS | LOCK_DATA |
+--------+----------------------------------------+-----------------------+-----------+----------+---------------+-------------+----------------+-------------------+------------+-----------------------+-----------+---------------+-------------+-----------+
| INNODB | 140506252934808:1092:140506164241328 | 4396 | 713 | 18 | xxxx | table_name | NULL | NULL | NULL | 140506164241328 | TABLE | IX | GRANTED | NULL |
| INNODB | 140506252928872:1092:140506164198896 | 4395 | 712 | 38 | xxxx | table_name | NULL | NULL | NULL | 140506164198896 | TABLE | IX | GRANTED | NULL |
| INNODB | 140506252933960:1092:140506164235296 | 4394 | 716 | 18 | xxxx | table_name | NULL | NULL | NULL | 140506164235296 | TABLE | IX | GRANTED | NULL |
| INNODB | 140506252932264:1092:140506164223232 | 4393 | 715 | 18 | xxxx | table_name | NULL | NULL | NULL | 140506164223232 | TABLE | IX | GRANTED | NULL |
| INNODB | 140506252933112:1092:140506164229264 | 4392 | 714 | 18 | xxxx | table_name | NULL | NULL | NULL | 140506164229264 | TABLE | IX | GRANTED | NULL |
| INNODB | 140506252933112:31:4:2:140506164226352 | 4392 | 714 | 18 | xxxx | table_name | NULL | NULL | PRIMARY | 140506164226352 | RECORD | X,REC_NOT_GAP | GRANTED | 1 |
+--------+----------------------------------------+-----------------------+-----------+----------+---------------+-------------+----------------+-------------------+------------+-----------------------+-----------+---------------+-------------+-----------+
6 rows in set (0.02 sec) -
等待锁的事务列表:
1
2
3SELECT TRX_ID,TRX_REQUESTED_LOCK_ID,TRX_MYSQL_THREAD_ID,TRX_QUERY
FROM information_schema.INNODB_TRX
WHERE TRX_STATE='LOCK WAIT'; -
找出事务正在等待哪种类型的锁
1
2
3SELECT THREAD_ID,EVENT_NAME,SOURCE,OPERATION,PROCESSLIST_ID
FROM events_waits_current JOIN threads USING (THREAD_ID)
WHERE PROCESSLIST_ID
-
导出数据
1 | -- 导出表数据 |
-
将MySQL数据导出成Excel格式
1
mysql db_name -u user_name -p -e "需要到的数据的SQL语句" > 文件名.xls
备份与还原
1 | 备份,将数据的结构与表内数据保存起来. |
-
执行
flush table with read lock
加全局读锁,并设置库为只读的,然后再备份数据1
2
3
4
5mysql> flush table with read lock;
Query OK, 0 rows affected (0.01 sec)
mysql> set global read_only=on;
Query OK, 0 rows affected (0.00 sec)
用户和权限管理
1 | -- root密码重置 |
MySQL有关权限的表
MySQL服务器通过权限表来控制用户对数据库的访问,权限表存放在mysql数据库里,由
mysql_install_db
脚本初始化.这些权限表分别user,db,table_priv,columns_priv和host
.
-
user权限表:记录允许连接到服务器的用户帐号信息,里面的权限是全局级的.
-
db权限表:记录各个帐号在各个数据库上的操作权限.
-
table_priv权限表:记录数据表级的操作权限.
-
columns_priv权限表:记录数据列级的操作权限.
-
host权限表:配合db权限表对给定主机上数据库级操作权限作更细致的控制.这个权限表不受GRANT和REVOKE语句的影响.
查看MySQL
默认配置
1 | mysqld --help --verbose |
版本升级
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 HoleLin's Blog!