安装 & 启动

安装

rpm -i https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
yum install mysql-community-server.x86_64

启动

systemctl start mysqld
systemctl enable mysqld

查看临时密码

#sudo grep 'temporary password' /var/log/mysqld.log
2019-05-15T06:42:54.826106Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: DVjSsl-ZX5f7

修改密码

#mysql -uroot -p
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass4!';

常用命令

连接

mysql -h127.0.0.1 -P 3306  -uroot -p

版本

#mysql -V
mysql  Ver 8.0.26 for Linux on x86_64 (MySQL Community Server - GPL)

数据库命令

mysql>help show

权限管理

mysql登陆用户权限校验主要是通过用户名密码+访问来源主机方式

创建用户

CREATE USER 'finley'@'localhost' IDENTIFIED BY 'password';

赋权限

GRANT ALL ON *.*  TO 'finley'@'localhost' WITH GRANT OPTION;

收回权限

REVOKE ALL ON *.*  FROM 'finley'@'localhost';

查看

select host,user from mysql.user;

SHOW GRANTS FOR 'finley'@'localhost';

删除

DROP USER 'finley'@'localhost';

常见错误

连接时被拒绝
ERROR 1130 (HY000): Host '10.1.88.32' is not allowed to connect to this MySQL server

修改访问来源IP
update user set host = '%' where host= 'localhost' and user = 'finley';
FLUSH PRIVILEGES;
连接时客户端报错
ERROR 2059 (HY000): Authentication plugin 'caching_sha2_password' cannot be loaded: /usr/lib64/mysql/plugin/caching_sha2_password.so: cannot open shared object file: No such file or directory

修改plugin类型
ALTER USER 'custom'@'%' IDENTIFIED WITH mysql_native_password BY '1qa@WS3ed';
FLUSH PRIVILEGES;

select host,user ,plugin from mysql.user;

配置管理

命令行配置

查看所用配置参数
show variables;

查看某个指定的配置参数
show variables like '%max_heap_table_size%';  
+---------------------+----------+   
| Variable_name       | Value    |
+---------------------+----------+
| max_heap_table_size | 16777216 |
+---------------------+----------+

设置参数
set max_heap_table_size = 167772160;                                                   

配置文件,基本配置

vi /etc/my.cnf

[mysql]
prompt = [\\u@\\p][\\d]>\\_
tee = "/tmp/tee.log"  ##设置客户端的查询日志
pager = "less -i -n -S"  ##分页显示查询出的数据,方便搜索查询到的数据
auto-rehash  ##预读取元数据,可以tab 补齐表名
#lower_case_table_names=1 ##对表名大小写不敏感
max_allowed_packet = 20M ## 服务端接收最大数据包

## 慢查询
slow_query_log=on
slow_query_log_file=/var/log/slow_mysql.log
long_query_time=10

skip-name-resolve # 跳过对连接的客户端进行DNS反向解析

数据类型

数据库备份

物理备份

xtrabackup

逻辑备份

-- 备份所有库 --all-databases 或 -A
mysqldump -uroot -pxxxxxx --all-databases > /tmp/all_database.sql

-- 备份部分数据库 --databases 或 -B
mysqldump -uroot -pxxxxxx --databases testdb1 testdb2 > /tmp/testdb.sql

-- 备份一个库中的多个表
mysqldump -uroot -pxxxxxx testdb tb1 tb2 tb3 > /tmp/tb.sql

-- 备份一个表中的部分数据
mysqldump -uroot -pxxxxxx testdb tb1 --where=" create_time >= '2019-08-01 00:00:00' " > /tmp/tb1.sql

-- 备份一个库中的表(排除部分表)--ignore-table
mysqldump -uroot -pxxxxxx testdb --ignore-table=testdb.tb1 > /tmp/testdb.sql

-- mysqldump备份默认是不包含存储过程,自定义函数及事件
-- --routines 或 -R 选项来备份存储过程及函数,使用 --events 或 -E 参数来备份事件
mysqldump -uroot -pxxxxxx -R -E --databases testdb > /tmp/testdb.sql

-- InnoDB 引擎备份不锁表  --single-transaction 
mysqldump -uroot -pxxxxxx --single-transaction --databases testdb > /tmp/testdb.sql

-- 数据恢复
mysql -uroot -pxxxxxx < /tmp/all_database.sql

-- 在全量恢复的备份中恢复部分库
sed -n '/^-- Current Database: `testdb`/,/^-- Current Database: `/p' all_databases.sql > testdb.sql

-- 只恢复单库备份中的一张表
cat testdb.sql | sed -e '/./{H;$!d;}' -e 'x;/CREATE TABLE `tb1`/!d;q' > /tmp/tb1_jiegou.sql
cat testdb.sql | grep --ignore-case  'insert into `tb1`' > /tmp/tb1_data.sql

状态查看

#1.显示状态信息:
#1.1.session(默认):取出当前窗口的执行;
#1.2.global:从mysql启动到现在
mysql> SHOW [SESSION|GLOBAL] STATUS LIKE '%Status_name%';
#2.查看查询次数(插入次数com_insert、修改次数com_insert、删除次数com_delete)
mysql> SHOW STATUS LIKE 'com_select';
#3.查看连接数(登录次数)
mysql> SHOW STATUS LIKE 'connections';
#4.数据库运行时间
mysql> SHOW STATUS LIKE 'uptime';
#5.查看慢查询次数
mysql> SHOW STATUS LIKE 'slow_queries';
#6.查看索引使用的情况:
#6.1。handler_read_key:这个值越高越好,越高表示使用索引查询到的次数。
#6.2.handler_read_rnd_next:这个值越高,说明查询低效。
mysql> SHOW STATUS LIKE 'handler_read%';

高可用&主从架构

监控

explain执行计划

增量,全量备份

周边工具

  • 客户端命令自动补齐工具 mycli