MySQL
MySQL 是一个 流行的关系型数据库管理系统,它被用于 SQL 数据库/关系数据库 等场景。MySQL 是流行的关系型数据库管理系统之一, 在 WEB 应用方面,MySQL是出色的 RDBMS (关系数据库管理系统) 应用软件。

准备
在参阅本文档使用 MySQL 时,需要确保如下几点:
- 
登录 Websoft9 控制台,然后找到(或安装)MySQL:
- 我的应用 菜单找到应用
 - 应用商店 菜单部署应用
 
 - 
应用是基于 Websoft9 安装的
 - 
应用的用途符合 GPL-2.0 开源许可协议
 - 
为应用准备配置访问方式:配置域名 或 服务器安全组开启网外端口
 
入门指南
测试可用性
Websoft9 控制台安装 MySQL/MariaDB 后,通过 "我的应用" 查看应用详情,在 "访问" 标签页中获取登录信息。
- 进入 MySQL 容器的命名模式,登录测试可用性
mysql -uroot -p - 登录成功会进入 MySQL 客户端模式
 
图形化工具
Websoft9 应用商店安装 phpMyAdmin 或 CloudBeaver 后,可以在不需要开启外网的情况下管理 MySQL
配置选项
- 配置文件目录(已挂载):/etc/mysql/conf.d
 - 初始化脚本目录(已挂载):/docker-entrypoint-initdb.d
 - 端口:3306
 - 主从复制(√):DDL 和 DML 操作通过二进制日志复传到从库,支持一主多从
 - 数据库主机名:容器名
 - 外网端口:安装时用户自定义选
 - Connectors and APIs
 - 命令行
- mysql
 - mysqladmin
 - mysqldump
 - mysqlhotcopy
 - mysqlcheck
 - mysqlshow
 - mysqlimport
 - mysqlbinlog
 - myisampack
 
 
管理维护
设置 Binary Log
MySQL默认没有开启 Binary Log,修改 MySQL 配置文件相关项
log_bin = mysql-bin      # enable Binary log
binlog_format = mixed    # Binary log format
expire_logs_days = 7     # Binary log expire time
设置 MySQL 远程访问
进入到 MySQL 容器的命令模式,设置 MySQL 远程访问:
# 开启远程访问
mysql>  use mysql;
mysql>  update user set host = '%' where user = 'root';
修改密码
执行一下命令:
mysqladmin -u 用户名 -p 旧密码 password '新密码' 
重置密码
通过临时容器重置密码:
- 停止 MySQL 容器,运行一个新的临时 MySQL 容器与旧容器共享存储目录
 - 在临时容器中修改密码,再删除临时容器
 - 恢复运行原 MySQL 容器
 
备份(导出)
- 
推荐使用 phpMyAdmin等可视化工具,导出数据库(建议SQL格式)
 - 
开发者可以使用 mysqldump 工具导出(效率更高,通用性更强)
mysqldump -uroot -p databasename>databasename.sql 
恢复(导入)
- 
登录 phpMyAdmin,打开顶部的导入标签页,根据向导开始导入
 - 
导入过程中可能会出现数据库字符集不兼容的情况,需要人工干预处理
 
迁移
MySQL 到 MySQL 的迁移,通常可以通过数据的导入导出快速实现。
但是,其他 DBMS 到 MySQL 的迁移最好是使用迁移工具,例如:MySQL Workbench: Database Migration
审计
- 安装 Maria Audit Plugin 插件
 - 设置审计日志路径
 
问题与故障
如何分析数据库日志?
Mariadb 日志是记录 MariaDB 数据库日常操作和错误信息的文件,可以分为:
- 二进制日志(Binlog):记录所有操作数据库的动作,适用于恢复数据库
 - 错误日志:适用于诊断问题
 - 慢查询日志:记录执行效率较低的查询语句
 - 通用查询日志:记录所有的查询操作
 
从排查故障的角度看,错误日志和慢查询日志是需要重点考虑的日志对象。
导入数据库报错?
查看脚本里面是否有创建数据库的脚本
数据库服务无法启动?
导致 MySQL 无法启动的主要原因有:
- 磁盘空间不足(二进制日志文件大小增长过快)
 - 死锁
 - MySQL 配置文件错误
 
建议先通过命令进行排查
# 查看磁盘空间
df -lh
# 查看内存使用
free -lh
# 查看数据库日志
docker logs container_name
日志导致磁盘空间不足?
- 手工清理日志
 - 考虑注释配置文件项 
#log_bin=mysql-bin关闭 binlog 
数据文件超过上限?
当单个数据文件超过上线时,会导致数据库无法启动。此时,需增加磁盘或增加一个新的数据文件地址
innodb_data_file_path= /data/mysql/data1:2000M;/data2/mysql/data2:2000M:autoextend
MySQL 容器无法远程访问?
可能原因有三点:
- 端口映射设置错误,导致容器没有网络
 - 容器没有开启远程访问权限
 - MySQL 8.0 特殊设置要求
 
mysqladmin 命令报错 ?
错误:Access denied; you need the SUPER privilege for this operation
原因:mysqlamdin 命令需 SUPER 权限,而普通用户默认没有这个权限。
无法删除所有表?
数据表之间的外键约束导致有些数据表无法删除
数据库出现死锁?
死锁一般是应用程序设计问题导致,其中事务操作出现死锁的几率更大。
一旦出现死锁,可以用如下命令确认死锁的原因:
MariaDB [(none)]> show innodb status \G;