1. 下载 MySQL

访问 MySQL 的下载页面得到以下三个产品,MySQL Enterprise Edition 和MySQL NDB Cluster CGE 是企业版,要钱的!!要钱的!!要钱的!!

下方的MySQL Community (GPL) Downloads »(好小一行字)才是我们要的社区版下载连接

这里针对几个版本做一下说明。

  • MySQL Yum Repository、MySQL APT Repository、MySQL SUSE Repository分别针对 RHEL(包括 CentOS 和 Fedora)、Debian、SUSE提供的 MySQL源,可分别使用yum、apt-get、zypper 命令安装 MySOL Server。

  • MySQL Community Server是MySQL Server的社区版。

  • MySOL Router是MySOL中间件,可实现读写分离。

  • MySQL Router与MySQL Shell、Group Replication一同组成 InnoDB Cluster。MySOL Shel是MSQL客户端工具,实现了XProtocol,它支持JavaScript、Pyhon和SQL三种语言,提供XDeVAPI和 AdminAPI两种 API。

  • XDeVAPI可将 MySQL作为文档数据库进行操作,AdminAPI用于管理InnoDBCluster。

  • MySOL Workbench是MySQL图形化管理工具,常用于ER建模。

  • Download Archives是MySOL社区版产品历史版本的人口。

我们关注的重点是 MySQL Server,所以这里点击 MySQL Community Server,进人其下载页面。

这里一般推荐用 Linux-Generic,根据自己的 CPU 和系统选择对应的版本即可。我们选择 MySQL 的二进制常规版本,Compressed TAR Archive 和 TAR 都可以,点击 Download 进行下载。

进入后很多人肯定第一感觉是要登陆账号,实际上不用,点下面那行仅下载就可以了。(小声逼逼下:Oracle 真有你的,处处都是坑。)

2. 基于二进制安装

这里推荐用二进制安装,源码安装太麻烦了,还要考虑各种依赖版本问题,所以这里就先不写啦!!!!

下载之后,我们把二进制包上传到服务器的/usr/local/ 上,我就直接贴命令了

#一些必要的依赖 都安装一遍吧
yum install openssl-devel -y
yum install perl-Data-Dumper perl-JSON -y
yum -y install libaio
yum -y install libncurses*
yum -y install perl perl-devel

cd /usr/local/
tar xvf mysql-8.0.41-linux-glibc2.28-x86_64.tar.xz
mv mysql-8.0.41-linux-glibc2.28-x86_64.tar.xz mysql

groupadd mysql
useradd -g mysql mysql

mkdir -p /data/mysql/3306/data
chown mysql.mysql /data/mysql/3306/data

#编辑配置文件,先简单写一些必要配置
cat /etc/my.cnf
[client]
socket = /data/mysql/3306/data/mysql.sock

[mysqld]
basedir = /usr/local/mysql
datadir = /data/mysql/3306/data/
user = mysql
port = 3306
socket = /data/mysql/3306/data/mysql.sock
pid-file = /data/mysql/3306/data/mysqld.pid
log_error = /data/mysql/3306/data/mysqld.err
log_timestamps = system

#初始化,查看错误日志,初始化成功会有一个随机密码,后面会有用处
/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --user=mysql --initialize

#启动实例,如果启动失败,可查看错误日志定位失败原因
/usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf

#查看mysql进程是否启动
ps -ef|grep mysql
netstat -tlunp|grep 3306

#登录实例,这时需要初始化时生存的随机密码
grep password /data/mysql/3306/data/mysqld.err
/usr/local/mysql/bin/mysql -uroot -S  /data/mysql/3306/data/mysql.sock -P(复制上自己的)

#登录进来后不管执行什么命令都要提示我们先修改密码,那我们就先改密码咯
mysql > alter user user() identified by 'password';

#修改成功之后退出在登陆就可以执行命令了,这里的employees是偶自己导入的官方测试库,你们是没有哈
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| employees          |
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
5 rows in set (0.00 sec)

到此我们迈进MySQL的大门啦,接下来说说在安装过程中遇到的问题,每个人遇到的坑可能不一样,要学会自己在必应(垃圾百度狗都不用)上去找答案,这里才能成长。

3. 遇到的坑

q: 初始化的时候失败提示 error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory

a:缺少libaio.so.1,apt install libaio即可,这里 Ubuntu 有点坑的就是它不叫这名,我们 apt search libaio 就知道它的真名叫作libaio-dev 或者libaio1

4. 初始化 MySQl 做了什么操作

这个是俺思考查询之后决定写一下记录一下,

  1. 创建数据目录。

MySQL 需要一个数据目录来存储数据库文件、日志文件、系统表等。

初始化过程会创建默认的数据目录(通常是 /var/lib/mysql),或者使用用户指定的目录。

数据目录中会包含以下子目录和文件:

mysql:存储 MySQL 系统数据库(如 mysqlinformation_schemaperformance_schema 等)。

ibdata1:InnoDB 存储引擎的共享表空间文件。

ib_logfile0ib_logfile1:InnoDB 的重做日志文件。

其他用户数据库的目录(在创建用户数据库后生成)。

  1. 创建系统表。

初始化过程会创建 MySQL 的系统数据库和表,这些表用于管理 MySQL 的元数据、权限、插件等信息。

主要的系统数据库包括:

mysql:存储用户权限、插件、时区等信息。

information_schema:提供数据库元数据的只读视图。

performance_schema:用于监控 MySQL 的性能。

sys:提供高级性能监控和诊断工具(可选)。

这些系统表是 MySQL 正常运行的基础,要是缺少会导致启动不起来。

  1. 生成默认配置文件。

配置文件包含 MySQL 的基本设置,例如:

数据目录路径,端口号(默认 3306),字符集设置(如 utf8mb4),日志文件路径(如错误日志、慢查询日志)。

  1. 设置 root 用户和初始权限。

初始化过程会创建 MySQL 的 root 用户,并为其设置初始密码。

如果未指定密码,root 用户可能没有密码(不安全,建议立即设置密码)。

初始化还会设置 root 用户的权限,使其拥有对 MySQL 服务器的完全控制权。

  1. 初始化 InnoDB 存储引擎。

  1. 设置日志文件。

初始化过程会创建 MySQL 的日志文件,包括:

  • 错误日志(Error Log):记录 MySQL 启动和运行时的错误信息。

  • 慢查询日志(Slow Query Log):记录执行时间超过指定阈值的查询。

  • 二进制日志(Binary Log):用于主从复制和数据恢复(可选)。

  1. 生成 SSL 和 RSA 文件(可选)。

如果启用了 SSL 或 RSA 加密,初始化过程会生成必要的 SSL 证书和 RSA 密钥文件。

这些文件用于加密客户端与服务器之间的通信。

  1. 设置时区和字符集。

初始化过程会加载时区表(如果配置了时区支持)。

设置默认的字符集和排序规则(如 utf8mb4utf8mb4_general_ci)。

这些数据目录下文件后面再单独做一期来说明下。

5. MySQL 服务管理

安装完 MySQL 后,通常需要将它设置为一个服务,主要基于以下两点考虑:

  1. 简化 MySQL 的管理,防止启动的时候,接手的人不知道配置文件的位置,关闭的时候有可能使用 kill -9 的风险

  2. 可设置为开机自启动,防止服务器意外宕机的时候没有自动拉起 MySQL 服务。

常用的管理方式有以下两种

服务管理脚本(/etc/init.d/mysqld)和 systemd,无论用哪种方式都可以用 service 来管理服务

5.1. /etc/init.d/mysqld 管理 MySQL 服务

MySQL 安装包通常会提供 MySQL 服务脚本,以二进制包为例,服务脚本位于 support-files 目录下

该目录下有三个文件

mysql-log-rotate :是一个用于管理 MySQL 日志文件的工具

mysql.server :管理单实例(这个是我们需要的)

mysqld_multi.server :管理多实例

mysql.server 复制到/etc/init.d 目录下,

cp mysql.server /etc/init.d/mysqld

# 启动实例
/etc/init.d/mysqld start
# 关闭实例
/etc/init.d/mysqld stop

5.2. 使用 systemd 管理 MySQL 服务

vi /usr/lib/systemd/system/mysqld.service
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target

[Install]
WantedBy=multi-user.target

[Service]
User=mysql
Group=mysql
# Have mysqld write its state to the systemd notify socket
Type=forking
# Disable service start and stop timeout logic of systemd for mysqld service.
TimeoutSec=0
# Start main service
ExecStart=/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf $MYSQLD_OPTS
# Use this to switch malloc implementation
EnvironmentFile=-/etc/sysconfig/mysql
# Sets open_files_limit
LimitNOFILE = 65536
Restart=on-failure
RestartPreventExitStatus=1
# Set environment variable MYSQLD_PARENT_PID. This is required for restart.
Environment=MYSQLD_PARENT_PID=1
PrivateTmp=false

#让配置生效
systemctl daemon-reload

#启动/关闭/查看状态 mysqld服务
systemctl start|stop|status mysqld

#设置开机自启动
system enable mysqld

多实例暂时还没学到,先不写上,继续留个坑位。

哦,对了,有些新手可能是刚学习 MySQL,连 SQL 语句也不太会,想练习一下苦于没有测试数据,这里推荐下官方的测试库。下载地址如下:https://gitcode.com/open-source-toolkit/d2b1d7,要是链接失效,网上找一下就行了。

解压之后导入就可以了,不过这里有个小坑。要是你用以下命令导入的话,会提示找不到文件

./mysql -uroot -S /data/mysql/3306/data/mysql.sock -pxxxx < /data/test_db-master/employees.sql

解决方法有两种

1. 把employees.sql 里面的文件路径换成自己的绝对路径,比如source load_departments.dump换成source /data/test_db-master/load_departments.dump。

2.直接进入到该 sql 的目录下,再执行导入命令即可。

导入这个测试库也是为了我们之后学 SQL 优化和调优用的。