200字
MySQL的介绍安装和初始化
2026-02-25
2026-02-28

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

评论