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 做了什么操作
这个是俺思考查询之后决定写一下记录一下,
创建数据目录。
MySQL 需要一个数据目录来存储数据库文件、日志文件、系统表等。
初始化过程会创建默认的数据目录(通常是 /var/lib/mysql
),或者使用用户指定的目录。
数据目录中会包含以下子目录和文件:
mysql
:存储 MySQL 系统数据库(如 mysql
、information_schema
、performance_schema
等)。
ibdata1
:InnoDB 存储引擎的共享表空间文件。
ib_logfile0
和 ib_logfile1
:InnoDB 的重做日志文件。
其他用户数据库的目录(在创建用户数据库后生成)。
创建系统表。
初始化过程会创建 MySQL 的系统数据库和表,这些表用于管理 MySQL 的元数据、权限、插件等信息。
主要的系统数据库包括:
mysql
:存储用户权限、插件、时区等信息。
information_schema
:提供数据库元数据的只读视图。
performance_schema
:用于监控 MySQL 的性能。
sys
:提供高级性能监控和诊断工具(可选)。
这些系统表是 MySQL 正常运行的基础,要是缺少会导致启动不起来。
生成默认配置文件。
配置文件包含 MySQL 的基本设置,例如:
数据目录路径,端口号(默认 3306),字符集设置(如 utf8mb4
),日志文件路径(如错误日志、慢查询日志)。
设置
root
用户和初始权限。
初始化过程会创建 MySQL 的 root
用户,并为其设置初始密码。
如果未指定密码,root
用户可能没有密码(不安全,建议立即设置密码)。
初始化还会设置 root
用户的权限,使其拥有对 MySQL 服务器的完全控制权。
初始化 InnoDB 存储引擎。
设置日志文件。
初始化过程会创建 MySQL 的日志文件,包括:
错误日志(Error Log):记录 MySQL 启动和运行时的错误信息。
慢查询日志(Slow Query Log):记录执行时间超过指定阈值的查询。
二进制日志(Binary Log):用于主从复制和数据恢复(可选)。
生成 SSL 和 RSA 文件(可选)。
如果启用了 SSL 或 RSA 加密,初始化过程会生成必要的 SSL 证书和 RSA 密钥文件。
这些文件用于加密客户端与服务器之间的通信。
设置时区和字符集。
初始化过程会加载时区表(如果配置了时区支持)。
设置默认的字符集和排序规则(如 utf8mb4
和 utf8mb4_general_ci
)。
这些数据目录下文件后面再单独做一期来说明下。
5. MySQL 服务管理
安装完 MySQL 后,通常需要将它设置为一个服务,主要基于以下两点考虑:
简化 MySQL 的管理,防止启动的时候,接手的人不知道配置文件的位置,关闭的时候有可能使用 kill -9 的风险
可设置为开机自启动,防止服务器意外宕机的时候没有自动拉起 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 优化和调优用的。
评论