MySQL
官方网址: https://www.mysql.com/
官方文档:https://dev.mysql.com/doc/
MySQL的版本演变
MySQL:5.1 --> 5.5 --> 5.6 --> 5.7 -->8.0
MariaDB:5.1 -->5.5 -->10.0--> 10.1 --> 10.2 --> 10.3 --> 10.4 --> 10.5
MySQL特性
开源免费
插件式存储引擎: 也称为"表类型",存储管理器有多种实现版本,功能和特性可能均略有差别;用户可根据需要灵活选择, MySQL 5.5.5 开始 InnoDB 引擎是 MYSQL 默认引擎。
MyISAM ==> Aria
InnoDB ==> XtraDB
单进程,多线程
诸多扩展和新特性
提供了较多测试组件
MySQL安装方式介绍和快速安装
安装方式介绍
- 程序包管理器管理的程序包
- 源代码编译安装
- 二进制格式的程序包:展开至特定路径,并经过简单配置后即可使用
RPM包安装MySQL
CentOS 安装光盘
项目官方:https://downloads.mariadb.org/mariadb/repositories/
国内镜像:https://mirrors.tuna.tsinghua.edu.cn/mariadb/yum/
https://mirrors.tuna.tsinghua.edu.cn/mysql/yum/
CentOS 8:安装光盘直接提供
- mysql-server:8.0
- mariadb-server : 10.3
CentOS 7:安装光盘直接提供
- mariadb-server:5.5 服务器包
- mariadb 客户端工具包
CentOS 6:
- mysql-server:5.1 服务器包
- mysql 客户端工具包
范例:Ubuntu24.04 利用默认仓库安装 MySQL8.0
[root@pgsql1 ~]#apt policy mysql-server
mysql-server:
Installed: (none)
Candidate: 8.0.45-0ubuntu0.24.04.1
Version table:
8.0.45-0ubuntu0.24.04.1 500
500 http://mirrors.aliyun.com/ubuntu noble-updates/main amd64 Packages
500 http://security.ubuntu.com/ubuntu noble-security/main amd64 Packages
8.0.36-2ubuntu3 500
500 http://mirrors.aliyun.com/ubuntu noble/main amd64 Packages
[root@pgsql1 ~]#apt install mysql-server
[root@pgsql1 ~]#mysql #启动mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.45-0ubuntu0.24.04.1 (Ubuntu)
Copyright (c) 2000, 2026, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql> status
--------------
mysql Ver 8.0.45-0ubuntu0.24.04.1 for Linux on x86_64 ((Ubuntu))
Connection id: 8
Current database:
Current user: root@localhost
SSL: Not in use
Current pager: stdout
Using outfile: ''
Using delimiter: ;
Server version: 8.0.45-0ubuntu0.24.04.1 (Ubuntu)
Protocol version: 10
Connection: Localhost via UNIX socket
Server characterset: utf8mb4
Db characterset: utf8mb4
Client characterset: utf8mb4
Conn. characterset: utf8mb4
UNIX socket: /var/run/mysqld/mysqld.sock
Binary data as: Hexadecimal
Uptime: 5 min 8 sec
Threads: 2 Questions: 5 Slow queries: 0 Opens: 119 Flush tables: 3 Open tables: 38 Queries per second avg: 0.016
--------------
初始化脚本提高安全性
运行脚本:mysql_secure_installation
设置数据库管理员root口令
禁止root远程登录
删除anonymous用户帐号
删除test数据库
范例: 针对MySQL5.6前版本进行安全加固
[root@centos7 ~]#file `which mysql_secure_installation `
[root@centos7 ~]#mysql_secure_installation
MySQL组成和常用工具
客户端程序
- mysql: 基于mysql协议交互式或非交互式的CLI工具
- mysqladmin:基于mysql协议管理mysqld
- mysqldump:备份工具,基于mysql协议向mysqld发起查询请求,并将查得的所有数据转换成insert等写操作语句保存文本文件中
- mysqlimport:数据导入工具
MyISAM存储引擎的管理工具:
- myisamchk:检查MyISAM库
- myisampack:打包MyISAM表,只读
服务端程序
- mysqld_safe
- mysqld
- mysqld_multi 多实例 ,示例:mysqld_multi --example
用户账号
mysql用户账号由两部分组成
'USERNAME'@'HOST'
ayaka@'10.0.0.100'
ayaka@'10.0.0.%'
ayaka@'%'
HOST限制此用户可以通过哪些远程主机连接MySQL服务器
支持使用通配符:
% 匹配任意长度的任意字符,相当于shell中*, 示例: 172.16.0.0/255.255.0.0 或 172.16.%.%
_ 匹配任意单个字符,相当于shell中?
MySQL客户端命令
mysql运行命令类型
- 客户端命令: 本地执行 每个命令都完整形式和简写格式
范例: 查看版本
[root@pgsql1 ~]#mysql -V
mysql Ver 8.0.45-0ubuntu0.24.04.1 for Linux on x86_64 ((Ubuntu))
范例:
mysql> \h, help
mysql> \u,use
mysql> \s,status
mysql> \!,system
- 服务端命令:通过mysql协议发往服务器执行并取回结果,命令末尾都必须使用命令结束符号,默认为分号
#示例:
mysql> SELECT VERSION();
+-------------------------+
| VERSION() |
+-------------------------+
| 8.0.45-0ubuntu0.24.04.1 |
+-------------------------+
1 row in set (0.00 sec)
mysql使用模式
- 交互模式
- 脚本模式:
mysql -uUSERNAME -pPASSWORD < /path/somefile.sql
cat /path/somefile.sql | mysql -uUSERNAME -pPASSWORD
mysql>source /path/from/somefile.sql
mysql命令使用格式
mysql [OPTIONS] [database]
mysql客户端常用选项:
-A, --no-auto-rehash 禁止补全
-u, --user= 用户名,默认为root
-h, --host= 服务器主机,默认为localhost
-p, --passowrd= 用户密码,建议使用-p,默认为空密码
-P, --port= 服务器端口
-S, --socket= 指定连接socket文件路径
-D, --database= 指定默认数据库
-C, --compress 启用压缩
-e "SQL" 执行SQL命令
-V, --version 显示版本
-v --verbose 显示详细信息
--print-defaults 获取程序默认使用的配置
登录系统:
#默认空密码登录
mysql -uroot -p
范例:运行mysql命令
mysql>use mysql #切换数据库
mysql>select database(); #查看当前数据库
mysql>select user(); #查看当前用户
mysql>SELECT User,Host,Password FROM user;
mysql>system clear #清屏
mysql> ^DBye #ctrl+d #退出
范例:客户端 mysql 的配置文件,修改提示符
#临时修改mysql提示符
[root@mysql ~]#mysql -uroot -p --prompt="\\r:\\m:\\s(\\u@\\h) [\\d]>\\_"
#临时修改mysql提示符
[root@mysql ~]#export MYSQL_PS1="\\r:\\m:\\s(\\u@\\h) [\\d]>\\_"
#持久修改mysql提示符
[root@mysql ~]#vim /etc/my.cnf.d/mysql-clients.cnf
[root@mysql ~]#vim /etc/mysql/conf.d/mysql.cnf
[mysql]
prompt="\\r:\\m:\\s(\\u@\\h) [\\d]>\\_" #12小进制
prompt="\\R:\\m:\\s(\\u@\\h) [\\d]>\\_" #24小时制
范例:配置所有MySQL 客户端的自动登录
vim /etc/my.cnf.d/client.cnf
vim /etc/mysql/conf.d/mysql.cnf
[client]
user=ayaka
password=123456
修改密码
#查看初始密码
grep password /var/log/mysqld.log
#修改初始密码方法1
[root@centos7 ~]#mysql -uroot -p'pe%b#S8ah)j-'
#修改为复杂密码
mysql> alter user root@'localhost' identified by 'Ayaka0!';
#修改初始密码方法2
[root@mysql ~]#mysqladmin -uroot -p'pe%b#S8ah)j-' password 'Ayaka0!'
mysqladmin命令
mysqladmin命令格式
mysqladmin [OPTIONS] command command....
范例:
#查看mysql服务是否正常,如果正常提示mysqld is alive
mysqladmin -uroot -pcentos ping
#关闭mysql服务,但mysqladmin命令无法开启
mysqladmin -uroot -pcentos shutdown
#创建数据库testdb
mysqladmin -uroot -pcentos create testdb
#删除数据库testdb
mysqladmin -uroot -pcentos drop testdb
#修改root密码
mysqladmin -uroot -pcentos password 'magedu'
#日志滚动,生成新文件/var/lib/mysql/mariadb-bin.00000N
mysqladmin -uroot -pcentos flush-logs
mycli
MyCLI 是基于Python开发的MySQL的命令行工具,具有自动完成和语法突出显示功能
相当于增强版的mysq
安装
#CentOS8安装
[root@centos8 ~]#yum install python3-pip -y
[root@centos8 ~]#pip3 install mycli
#ubuntu安装
[root@ubuntu1804 ~]#apt -y install mycli
[root@ubuntu1804 ~]#mycli -u root -S /var/run/mysqld/mysqld.sock
使用mycli
mycli -u root
服务端配置
服务端配置文件
服务端(mysqld): 工作特性有多种配置方式
1 命令行选项
2 配置文件: 类ini格式 集中式配置 能够为mysql的各应用程序提供配置信息
服务端配置文件:
/etc/my.cnf #Global选项
/etc/mysql/my.cnf #Global选项
~/.my.cnf #User-specific 选项
配置文件格式:
[mysqld]
[mysqld_safe]
[mysqld_multi]
[mysql]
[mysqladmin]
[mysqldump]
[server]
[client]
格式:
parameter = value
说明:
_和- 相同
1,ON,TRUE意义相同, 0,OFF,FALSE意义相同,无区分大小写
socket连接说明
官方说明
https://dev.mysql.com/doc/mysql-port-reference/en/mysql-ports-reference-tables.html#mysql-client-server-ports
服务器监听的两种 socket 地址:
- ip socket: 监听在tcp的3306端口,支持远程通信 ,侦听3306/tcp端口可以在绑定有一个或全部接口IP上
- unix sock: 监听在sock文件上,仅支持本机通信, 如:/var/lib/mysql/mysql.sock)
说明:host为localhost 时自动使用unix sock
范例: MySQL的端口
mysql> SHOW VARIABLES LIKE 'port';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| port | 3306 |
+---------------+-------+
1 row in set (0.01 sec)
#MySQL8.0增加了一个33060/tcp端口
#Port 33060 is the default port for the MySQL Database Extended Interface (the
MySQL X Protocol).
mysql> SHOW VARIABLES LIKE 'mysqlx_port';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| mysqlx_port | 33060 |
+---------------+-------+
1 row in set (0.00 sec)
开启mysql远程连接
sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
#将 127.0.0.1 修改为 0.0.0.0
bind-address = 0.0.0.0
sudo systemctl restart mysql
#授予用户远程访问权限
#登录 MySQL:
mysql -u root -p
#如果你只想允许特定 IP 访问,将 % 换成具体的 IP 地址。
#创建一个可以从任何 IP (%) 登录的用户
CREATE USER 'myuser'@'%' IDENTIFIED BY '你的密码';
#授予该用户所有数据库的所有权限
GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' WITH GRANT OPTION;
#刷新权限
FLUSH PRIVILEGES;
配置防火墙
ufw allow 3306/tcp
ufw reload
测试
mysql -h 服务器公网IP -u myuser -p
关闭mysqld网络连接
只侦听本地客户端, 所有客户端和服务器的交互都通过一个socket文件实现,socket的配置存放
在/var/lib/mysql/mysql.sock) 可在/etc/my.cnf修改
范例:
vim /etc/my.cnf
[mysqld]
skip-networking=1
bind_address=127.0.0.1
实战案例:通用二进制安装安装MySQL 5.7 和 MySQL8.0
安装相关包
yum -y install libaio numactl-libs ncurses-compat-libs
用户和组
groupadd mysql
useradd -r -g mysql -s /bin/false mysql
准备程序文件
wget http://mirrors.163.com/mysql/Downloads/MySQL-5.7/mysql-5.7.31-linux-
glibc2.12-x86_64.tar.gz
tar xf mysql-5.7.31-linux-glibc2.12-x86_64.tar.gz -C /usr/local
cd /usr/local/
ln -s mysql-5.7.31-linux-glibc2.12-x86_64/ mysql
chown -R root.root /usr/local/mysql/
准备环境变量
echo 'PATH=/usr/local/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
. /etc/profile.d/mysql.sh
准备配置文件
cp /etc/my.cnf{,.bak}
vim /etc/my.cnf
[mysqld]
datadir=/data/mysql
skip_name_resolve=1
socket=/data/mysql/mysql.sock
log-error=/data/mysql/mysql.log
pid-file=/data/mysql/mysql.pid
[client]
socket=/data/mysql/mysql.sock
初始化数据库文件并提取root密码
#/data/mysql 会自动生成,但是/data/必须事先存在
mkdir -pv /data/mysql
方式1: 生成随机密码
mysqld --initialize --user=mysql --datadir=/data/mysql
...省略...
2025-07-04T13:03:54.258140Z 1 [Note] A temporary password is generated for
root@localhost: LufavlMka6,! #注意生成root的初始密码
grep password /data/mysql/mysql.log
2025-12-26T13:31:30.458826Z 1 [Note] A temporary password is generated for
root@localhost: LufavlMka6,!
awk '/temporary password/{print $NF}' /data/mysql/mysql.log
LufavlMka6,!
方式2: 生成 root 空密码
mysqld --initialize-insecure --user=mysql --datadir=/data/mysql
准备服务脚本和启动
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
service mysqld start
修改口令
#修改前面生成的随机密码为指定密码
mysqladmin -uroot -p'LufavlMka6,!' password ayaka
#修改前面生成的空密码为指定密码
mysqladmin -uroot password ayaka
测试登录
mysql -uroot -pmagedu
源码编译安装 MySQL
建议:内存6G以上,否则可能会编译出错,CPU 核数越多越好
说明:本操作过程适用于以下版本
mysql-5.6.51.tar.gz
mariadb-10.2.18.tar.gz
CentOS 7
安装相关依赖包
yum -y install gcc gcc-c++ cmake bison bison-devel zlib-devel libcurl-devel
libarchive-devel boost-devel ncurses-devel gnutls-devel libxml2-devel
openssl-devel libevent-devel libaio-devel perl-Data-Dumper
做准备用户和数据目录
mkdir /data/mysql
chown mysql.mysql /data/mysql
源码编译安装
编译安装说明
利用cmake编译,而利用传统方法,cmake的重要特性之一是其独立于源码(out-of-source)的编译功能,即编译工作可以在另一个指定的目录中而非源码目录中进行,这可以保证源码目录不受任何一次编译的影响,因此在同一个源码树上可以进行多次不同的编译,如针对于不同平台编译
编译选项:
https://dev.mysql.com/doc/refman/5.7/en/source-configuration-options.html
下载并解压缩源码包
tar xvf mysql-5.6.51.tar.gz -C /usr/local/src
#mariadb-10.2.18.tar.gz
源码编译安装 MySQL
cd mysql-5.6.51/
cmake . \
-DCMAKE_INSTALL_PREFIX=/apps/mysql \
-DMYSQL_DATADIR=/data/mysql/ \
-DSYSCONFDIR=/etc/ \
-DMYSQL_USER=mysql \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITHOUT_MROONGA_STORAGE_ENGINE=1 \
-DWITH_DEBUG=0 \
-DWITH_READLINE=1 \
-DWITH_SSL=system \
-DWITH_ZLIB=system \
-DWITH_LIBWRAP=0 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_UNIX_ADDR=/data/mysql/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci
make -j 8 && make install
#提示:如果出错,执行rm -f CMakeCache.txt
准备环境变量
echo 'PATH=/apps/mysql/bin:$PATH' > /etc/profile.d/mysql.sh
. /etc/profile.d/mysql.sh
准备配置文件
cp -b /apps/mysql/support-files/my-default.cnf /etc/my.cnf
#针对旧版本或mariadb-10.2.18.tar.gz
cp /apps/mysql/support-files/my-huge.cnf /etc/my.cnf
准备启动脚本,并启动服务
cp /apps/mysql/support-files/mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
service mysqld start
安全初始化
mysql_secure_installation
基于 docker 容器创建 MySQL
范例:
[root@ubuntu1804 ~]#docker run --name mysql -d -p 3306:3306 -e
MYSQL_ROOT_PASSWORD=123456 mysql:5.7.30
[root@ubuntu1804 ~]#mysql -uroot -p123456 -h127.0.0.1