赞
踩
记录 MySQL 在日常运维中可能会使用到的命令、Sql语句。
全库备份
mysqldump \
-h MYSQL_IP \
-u MYSQL_ADMIN_USER \
-p MYSQL_ADMIN_PASSWORD \
--socket /var/run/mysql/default.mysql.socket \
--skip-opt \
--create-options \
--single-transaction \
-q \
--no-autocommit \
-R \
--triggers \
--default-character-set=utf8 \
--all-databases | gzip > /dbbak/all_db_$(date +%Y%m%d_%H%M%S).gz;
单库备份
mysqldump \
-h MYSQL_IP \
-u MYSQL_ADMIN_USER \
-p MYSQL_ADMIN_PASSWORD \
--socket /var/run/mysql/default.mysql.socket \
--skip-opt \
--create-options \
--single-transaction \
-q \
--no-autocommit \
-R \
--triggers \
--default-character-set=utf8 \
--events 库名| gzip > /dbbak/库名_$(date +%Y%m%d_%H%M%S).gz;
参数介绍
# 3. 还原 testdb 数据库
gunzip /dbbak/库名_$(date +%Y%m%d_%H%M%S).gz
mysql \
-h$BK_MYSQL_IP \
-u$BK_MYSQL_ADMIN_USER \
-p$BK_MYSQL_ADMIN_PASSWORD \
--socket /var/run/mysql/default.mysql.socket \
库名 < /data/dbbak/库名_$(date +%Y%m%d_%H%M%S)
0. 创建 MySQL 用户, 并设置密码为 MYSQL2023. CREATE USER 'user1'@'localhost' IDENTIFIED BY ' MYSQL2023.'; -- 注:'user1'@'localhost' 和 'user1'@'127.0.0.1' 会被识别为两个不同的用户 1.修改用户密码 ALTER USER 'myuser'@'localhost' IDENTIFIED WITH mysql_native_password BY 'newpassword' 2. 查看所有用户信息 SELECT user,host FROM mysql.user; 3. 删除用户 DROP USER 'user1'@'localhost'; 4. 创建密码为 MYSQL2023. 的用户 user1,并赋予其对所有数据库有所有的操作权限(ALL) -- 注意mysql8创建用户和授权需要分开执行 GRANT ALL ON *.* TO 'user1'@'%' IDENTIFIED BY ' MYSQL2023.' WITH GRANT OPTION; FLUSH PRIVILEGES; -- 刷新权限 5. 创建密码为 MYSQL2023. 的用户 user2,并赋予其对所有数据库只有只读权限(SELECT) GRANT SElECT ON *.* TO 'user2'@'%' IDENTIFIED BY " MYSQL2023."; FLUSH PRIVILEGES; -- 刷新权限 6. 查看 user1 的权限 SHOW GRANTS FOR 'user1'@'%'; 7. 创建数据库(如果不存在) CREATE DATABASE IF NOT EXISTS dbname DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci; 8. 查看所有数据库 SHOW DATABASES; 9. 查看数据库的建库语句 SHOW CREATE DATABASE dbname; 10. 查看某表的创建语句 SHOW CREATE TABLE tablename; 11. 查看所有数据库大小 SELECT table_schema AS '数据库', SUM(table_rows) AS '记录数', SUM(TRUNCATE(data_length/1024/1024/1024, 2)) AS '数据容量(GB)', SUM(TRUNCATE(index_length/1024/1024/1024, 2)) AS '索引容量(GB)' FROM information_schema.tables GROUP BY table_schema ORDER BY SUM(data_length) DESC, SUM(index_length) DESC; 12. 查看某个库中的表大小 SELECT table_schema AS '数据库', table_name AS '表名', table_rows AS '记录数', TRUNCATE(data_length/1024/1024/1024, 2) as '数据容量(GB)', TRUNCATE(index_length/1024/1024/1024, 2) as '索引容量(GB)' FROM information_schema.tables WHERE table_schema='表名称' /* 数据库名 */ ORDER BY table_rows DESC, index_length DESC; 13. 查询当前 MySQL 版本 SELECT @@VERSION; 14. 查询定义的packet大小 select @@max_allowed_packet; 15. 查看当前mysqld的所有参数,包括默认值 SHOW VARIABLES; 16. 查询当前 MySQL 实例的端口 SHOW VARIABLES LIKE 'port'; 17. 查询 MySQL 实例的 socket 文件路径 SHOW VARIABLES LIKE 'socket'; 18. 查看实例的数据路径 SHOW VARIABLES LIKE 'datadir'; 19. 查看是否开启了慢查询日志, 以及慢日志的路径, ON代表开启 SHOW VARIABLES LIKE 'slow_query_log%'; 20. 查看从服务器是否开启慢查询日志,ON代表开启 SHOW VARIABLES LIKE 'log_slow_slave_statements'; 21. 查看慢查询时间,查询超过这个时间即被标记为慢查询 SHOW VARIABLES LIKE 'long_query_time'; 22. 在线开启慢日志 SET GLOBAL slow_query_log=1; 23. 在线修改慢日志路径 SET GLOBAL slow_query_log_file='/tmp/slow.log'; 24. 在线修改慢日志查询时间 SET GLOBAL long_query_time=0.2; /* 需要重新登录命令行 */ 25. 查看日志的输出格式 SHOW VARIABLES LIKE 'log_output'; /* FILE 或 TABLE */ 26. 查看日志的时间信息 SHOW VARIABLES LIKE 'log_timestamps'; /* UTC时间或者SYSTEM时间 */ 27. 查看是否开启 '将没有使用索引的SQL语句记录到慢查询日志中' 的功能 SHOW VARIABLES LIKE 'log_queries_not_using_indexes'; 28. 限制每分钟内,在慢查询日志中,记录没有使用索引的次数 /* 一般与上面的参数一起使用, 避免日志快速增长。 */ SHOW VARIABLES LIKE 'log_throttle_queries_not_using_indexes'; 29. 查看创建的临时表的存储引擎类型 SHOW VARIABLES LIKE "default%tmp%"; 30. 查询log文件大小 SHOW VARIABLES LIKE 'innodb_log_file_size'; 31. 查询页的大小 /* 1) 一旦数据库通过innodb_page_size设置完成,则后续无法更改, 2) innodb_page_size 是针对普通表的,压缩表不受限制。 */ SHOW VARIABLES LIKE 'innodb_page_size'; 32. 查看缓冲池的大小 /* 1) 每次读写数据都是通过buffer pool,当buffer pool中没有所需的数据时,才去硬盘中获取。 2) 该值设置的越大越好,buffer pool也是以页(page)为单位的,且大小和innodb_page_size一致。 */ SHOW VARIABLES LIKE 'innodb_buffer_pool_size'; 33. 在线调整innodb_buffer_pool_size /* MySQL 5.7之前的版本,修改该值,需要重启 */ SET GLOBAL innodb_buffer_pool_size=2*1024*1024*1024; 34. 设置了多少个缓冲池 /* 设置多个instance可将热点打散,提高并发性能(建议设置成cpu 个数值) */ SHOW VARIABLES LIKE 'innodb_buffer_pool_instances'; 35. 是否在停机时 dump 出 buffer pool数据 /* 在MySQL 5.6 以后,可以在停机的时候dump出buffer pool的数据,然后在启动的时候Load进buffer pool。该功能可以在MySQL启动时自动预热,无需人工干预。 */ SHOW VARIABLES LIKE 'innodb_buffer_pool_dump_at_shutdown'; 36. 启动时加载dump的文件 /* 恢复到buffer pool中。dump的越多,启动的越慢 */ SHOW VARIABLES LIKE 'innodb_buffer_pool_load_at_startup'; 37. 查看 dump 百分比 /* 是每个buffer pool文件,而不是整体 */ SHOW VARIABLES LIKE 'innodb_buffer_pool_dump_pct'; 38. 查看隔离级别 SHOW VARIABLES LIKE 'transaction_isolation'; 39. 设置隔离级别 SEt transaction_isolation='read-committed'; 40. 是否将死锁信息打印到err_log中 SHOW VARIABLES LIKE 'innodb_print_all_deadlocks'; 41. master thread 每秒刷新redo的buffer到logfile /* 5.7版本可以设置刷新间隔时间, 默认是1秒。 */ SHOW VARIABLES LIKE "%innodb_flush_log_at_timeout%"; 42. 查看binlog的类型 /* STATEMENT: 记录SQL语句 ROW: 记录SQL语句操作的那些行(行的变化) MIXED: mixed 混合statement 和 Row 格式(不推荐)。 */ SHOW VARIABLES LIKE 'binlog_format'; 43. 查看timeout参数 SHOW VARIABLES LIKE "%timeout%" 44. 查看最大连接数 SHOW VARIABLES LIKE 'max_connections'; 45. 查看 binlog 过期时间 show variables like 'expire_logs_days'; 46. 修改 binlog 过期时间 set global expire_logs_days=7; 47. 显示表结构和列结构的命令 DESC dbname.tablename; 48. 显示正在执行的线程 SHOW PROCESSLIST; 49. 查看buffer pool的状态 SHOW ENGINE INNODB STATUS\\G; 50. 查看表的索引情况 SHOW INDEX FROM tablename; 51. 查看锁的信息 SELECT * FROM sys.innodb_lock_waits; 52. 查看 master 状态 SHOW MASTER STATUS\\G; /*在主节点上执行*/ 53. 查看所有的log文件 SHOW MASTER LOGS; /*在主节点上执行*/ 54. 查看 slave 状态 SHOW SLAVE STATUS\\G; /*在从节点上执行*/ 55. 在线清理 mysql-bin3306.000003 之前的日志 PURGE BINARY LOGS TO 'mysql-bin3306.000003';
-- 1. 字段和表中的顺序一致 ,DEFAULT代表使用该列的默认值
INSERT INTO tbl_name VALUES (值1), (值2), (DEFAULT);
-- 2. 字段顺序打乱,字段与值一一对应
INSERT INTO tbl_name (字段3, 字段2, 字段1) VALUES (值3, 值2, 值1);
-- 3. set实现
INSERT INTO tbl_name set 字段1=值1,字段2=值2,字段3=值3
-- 如果主键冲突,则更新后面的字段
INSERT INTO tbl_name VALUES (值1), (值2), (值3) DUPLICATE KEY UPDATE 字段=值, …;
-- 如果主键冲突,则跳过该行插入
INSERT IGNORE INTO tbl_name ...
UPDATE tab_name SET 字段=值, 字段=值 WHERE 字段=值;
DELETE FROM tab_name WHERE 字段=值;
-- 删除表中某一列值重复的项,只保留最小id的
DELETE FROM tab_name a, tab_name b where a.id > b.id and a.字段=b.字段
执行顺序为:FROM > WHERE > GROUP BY > HAVING > ORDER BY > SELECT
SELECT 查询的内容 FROM tab_name WHERE 查询条件 GROUP BY 分组字段 HAVING 分组后的条件 ORDER BY 字段;
-- 连接查询
-- 拼接结果
union -- 对两个集合(结果)进行并集操作
union all -- 可以有重复的并集
子查询:一个select查询的结果作为另一个查询的条件
SELECT * FROM tab_name1 where tid IN (SELECT id from tab_name2 WHERE xxx > x)
连接查询:通过某一字段将两表连接,通过不同的连接方式展示查询结果
-- 内连接:取两表交集
SELECT * FROM tab_name1 a JOIN tab_name2 b ON a.aid = b.bid
-- 其实等同于
SELECT * FROM tab_name1 a ,tab_name2 b WHERE a.aid = b.bid
-- 外连接-左连接:以左表为主取值,查出的结果条数=左表的总条数
SELECT * FROM tab_name1 a LEFT JOIN tab_name2 b ON a.aid = b.bid
-- 外连接-右连接:以右表为主取值,查出的结果条数=右表的总条数
SELECT * FROM tab_name1 a RIGHT JOIN tab_name2 b ON a.aid = b.bid
-- 内置函数 abs(x) -- 绝对值 format(x, d) -- 格式化千分位数值 format(1234567.456, 2) = 1,234,567.46 ceil(x) -- 向上取整 floor(x) -- 向下取整 round(x) -- 四舍五入去整 mod(m, n) -- m%n 求余 pi() -- 获得圆周率 pow(m, n) -- m^n sqrt(x) -- 算术平方根 rand() -- 随机数 -- 时间相关 now(), current_timestamp(); -- 当前日期时间 current_date(); -- 当前日期 current_time(); -- 当前时间 date( yyyy-mm-dd hh:ii:ss ); -- 获取日期部分 time( yyyy-mm-dd hh:ii:ss ); -- 获取时间部分 -- 双分支 类似java的三元 expr为表达式 if(expr1,expr2,expr3) -- expr1成立则返回expr2的值,反之返回expr3的值 -- 聚合函数 count() -- 计数 sum() -- 求和 max() -- 最大值 min() -- 最小值 avg() -- 平均值 -- 分组 类似于java中stream的groupingby group_concat([DISTINCT] column1 [ORDER BY column2 ASC\DESC] [SEPARATOR seq]);-- 将分组中column1这一列对应的多行的值 [去重] 按照column2 升序或者降序进行连接,其中分隔符为seq
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。