【数据库运维】MySql 运维相关总结

【1】MySql 数据库安装

更新软件源
sudo apt-get update

安装 mysql
sudo apt-get install mysql-server

启动与关闭 mysql
service mysql start
service mysql stop

确认是否启动成功,mysql 节点处于 LISTEN 状态表示启动成功
sudo netstat -tap | grep mysql

进入 mysql shell 界面
mysql -u root -p

参考,Ubuntu16.04上安装MySQL(详细过程)

【2】MySql 数据库密码找回

1. 编辑 mysqld.cnf 文件
sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
2. 在文件中的 skip-external-locking 一行的下面添加一行
skip-grant-tables
3. 重启 MySQL 服务
sudo service mysql restart
4. 终端输入 mysql 进入 MySQL,输入 USE mysql 切换至 mysql 数据库
mysql
USE mysql
5. 修改 root 用户的密码为 000000
UPDATE mysql.user SET authentication_string=password('000000') WHERE User='root' AND Host ='localhost';
6. 修改字段 plugin
UPDATE user SET plugin="mysql_native_password";

flush privileges;
quit
7. 注释掉 /etc/mysql/mysql.conf.d/mysqld.cnf 文件中添加的一行

参考,ubuntu下MySQL忘记密码重置方法

【3】MySql 数据库常用命令总结

【3.1】MySql 数据库

MySql 数据库
show databases -- 查看当前的数据库
use 数据库名称 -- 选择特定的数据库
show tables -- 查看当前选中数据库中所有表

【3.2】MySql 字符集

MySql 字符集
show variables like 'charact%'; -- 显示 MYSQL 字符集编码
show variables like '%char%'; -- 查看 MySQL 数据库服务器和数据库字符集
show charset; -- 查看当前安装的 MySQL 所支持的字符集
SHOW CREATE DATABASE db_name; -- 查看数据库编码
SHOW CREATE TABLE tbl_name; -- 查看表编码
SHOW FULL COLUMNS FROM tbl_name; -- 查看字段编码
SHOW VARIABLES WHERE Variable_name LIKE 'character\_set\_%' OR Variable_name LIKE 'collation%'; -- 查看系统的编码字符

系统变量
– character_set_server : 默认的内部操作字符集
– character_set_client : 客户端来源数据使用的字符集
– character_set_connection : 连接层字符集
– character_set_results : 查询结果字符集
– character_set_database : 当前选中数据库的默认字符集
– character_set_system : 系统元数据(字段名等)字符集
– collation_connection : 链接校对
– collation_database : 数据库校对
– collation_server : 服务器校对

设置编码
编辑 mysqld.cnf 配置文件,添加配置信息
[client]
default-character-set=utf8
[mysqld]
default-character-set=utf8

MySQL 创建设置字符集和修改字符集
CREATE DATABASE IF NOT EXISTS mydb DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci -- 创建数据库指定数据库的字符集
CREATE TABLE table_name (id int unsigned) DEFAULT CHARACTER SET utf8 COLLATEutf8_general_ci; -- 创建表时指定字符集
CREATE TABLE table_name2 (id int,name char(10) CHARACTER SET utf8 COLLATE utf8_general_ci); -- 创建字段时指定字符集
ALTER DATABASE db_name DEFAULT CHARACTER SET character_name [COLLATE ...]; -- 修改数据库字符集
ALTER TABLE tbl_name CONVERT TO CHARACTER SET character_name [COLLATE ...] -- 把表默认的字符集和所有字符列(CHAR,VARCHAR,TEXT) 改为新的字符集
ALTER TABLE tbl_name DEFAULT CHARACTER SET character_name [COLLATE...]; -- 只是修改表的默认字符集
ALTER TABLE tbl_name CHANGE c_name c_name CHARACTER SET character_name [COLLATE...]; -- 修改字段的字符集

【4】MySql 慢查询日志

运行时间超过 long_querry_time (默认 10s) 值的 SQL, 会被记录到慢查询日志中
【4.1】MySql 慢查询日志配置

修改配置文件 /etc/mysql/conf.d/mysql.conf

[mysql]
slow_query_log = ON
#指定日志文件存放位置,可以为空,系统会给一个缺省的文件 host_name-slow.log
log-slow-queries=/var/lib/mysql/slowquery.log
#记录超过的时间,默认为 10s
long_query_time=2

【4.2】MySql 慢查询日志相关命令

SHOW VARIABLES LIKE 'long_query_time%'; -- 查看慢查询的时间阈值
SHOW VARIABLES LIKE '%slow_query_log%'; -- 查看是否开启
set global slow_query_log=1; -- 设置为 1, 开启慢查询日志
set global long_query_time=0.001; -- 设置慢查询的时间为 0.001,超过 0.001 就显示为慢查询
select * from sleep(1); -- 睡眠 1s
show global status like '%Slow_queries'; -- 查询慢查询的条数,需要优化的条数
mysqldumpslow -s r -t /var/lib/mysql/RMT01-slow.log; -- 分析慢启动日志

【4.3】日志分析工具 mysqldumpslow

Usage: mysqldumpslow [ OPTS... ] [ LOGS... ]  -- 后跟参数以及log文件的绝对地址;

  -s            what to sort by (al, at, ar, c, l, r, t), 'at' is default
                al: average lock time,平均锁定时间
                ar: average rows sent,平均返回记录数
                at: average query time,平均查询时间
                c: count,访问次数
                l: lock time,锁定时间
                r: rows sent,返回记录
                t: query time,查询时间
                排序的标准

  -r           reverse the sort order (largest last instead of first),反向排序
  -t NUM       just show the top n queries,显示记录数目
  -a           don't abstract all numbers to N and strings to 'S',不将所有的数字抽象为N,字符串抽象为S
  -n NUM       abstract numbers with at least n digits within names,在名称中至少有n个数字抽象为数字
  -g PATTERN   grep: only consider stmts that include this string,正则模式
  -h HOSTNAME  hostname of db server for *-slow.log filename (can be wildcard),
               default is '*', i.e. match all,数据库服务器 hostname
  -i NAME      name of server instance (if using mysql.server startup script),服务器实例名称
  -l           don't subtract lock time from total time,总时间不减去锁定时间

致谢
本博客为本人的学习笔记与实际操作分享,同时,参考网上众多博主的技术博客总结而成,在此向各位博主表示感谢,本博客若有不足请多多指正;

【1】ubuntu下MySQL忘记密码重置方法

【2】Ubuntu16.04上安装MySQL(详细过程)

【3】MySQL 慢查询日志

【4】mysql系列(十二)——慢查询分析工具(mysqldumpslow)