MySQL 数据库的安装不管是对于开发者还是对于运维人员来说,都是必然需要面对的问题;它的安装过程其实并不复杂,而且官网文档以及网络上各种教程也非常多,都可以让我们用来当作学习和参考。但是对于新手来说,各种不同形式的安装教程,在选择上也带来了一定的安装难题,另一方面每个人系统的环境也不一样导致安装过程中出现各式各样的报错,很多时候就算按照教程也不能完全安装成功。
基于这种现象,本文详细介绍了 MySQL 安装的完成过程,小伙伴们看完记得收藏哦!(^_^)
本文安装的版本为 mysql-8.0.20 ,其他版本的安装也类似,但是可能在一些细节上有所不同。主要在于其它版本的 MySQL 配置文件目录位置和结构可能有所改变,使用此说明可能会出现找不到配置我呢见或者配置后不生效的情况。另外需要注意的是在安装过程中务必保证文件路径的前后统一,否则会出现不可预期的结构,如果不熟练,可以完全使用文中的命令进行操作。
一、安装 MySQL 数据库
-
清理历史环境,为了避免对后续安装产生影响,所以我们先要清除一下环境,把之前安装的一些包全部移除
$ rpm -qa | grep mariadb
$ yum remove mariadb-libs -y -
创建用户和组
$ useradd mysql -s /sbin/nologin
$ id mysql -
创建相关目录
3.1 创建软件目录
$ mkdir -p /usr/local/mysql
3.2 创建数据目录
$ mkdir -p /data/mysql/
3.3 创建日志目录
$ mkdir -p /binlog/mysql/ -
设置权限
$ chown -R mysql.mysql /usr/local/mysql /data/ /binlog/
-
在 /usr/local/mysql 下上传软件,然后解压,MySQL官网:https://dev.mysql.com
$ wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz
$ tar xf mysql-8.0.20-linux-glibc2.12-x86_64.tar.xz -
文件名太长,为了访问方便可以做个软链接
$ ln -s 二进制包 mysql
-
设置环境变量
这里需要提到两个比较常用的目录 /bin、/support-file:
-
/bin:数据库的一些可执行文件 -
/support-file:配置文件
-
$ vim /etc/profile
然后在末尾添加:export PATH=/usr/local/mysql/bin:$PATH
退出之后 source 使其生效
$ source /etc/profile
可以通过查看 MySQL 版本来验证
$ mysql -V
在验证版本时出现以下报错:
[root@VM-0-3-centos ~]$ mysql --version
mysql: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory
看报错是因为缺少libtinfo.so.5,可以进入到/usr/local/mysql/bin目录下,使用 ldd mysql 看下mysql依赖的库文件:
[root@VM-0-3-centos bin]$ ldd mysql
linux-vdso.so.1 (0x00007ffea0540000)
libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f2b2d74e000)
librt.so.1 => /lib64/librt.so.1 (0x00007f2b2d545000)
libcrypto.so.1.1 => /usr/local/mysql-8.0.20-linux-glibc2.12-x86_64/bin/./../lib/private/libcrypto.so.1.1 (0x00007f2b2d098000)
libssl.so.1.1 => /usr/local/mysql-8.0.20-linux-glibc2.12-x86_64/bin/./../lib/private/libssl.so.1.1 (0x00007f2b2ce09000)
libdl.so.2 => /lib64/libdl.so.2 (0x00007f2b2cc05000)
libtinfo.so.5 => not found
libstdc++.so.6 => /lib64/libstdc++.so.6 (0x00007f2b2c870000)
libm.so.6 => /lib64/libm.so.6 (0x00007f2b2c4ee000)
libgcc_s.so.1 => /lib64/libgcc_s.so.1 (0x00007f2b2c2d6000)
libc.so.6 => /lib64/libc.so.6 (0x00007f2b2bf14000)
/lib64/ld-linux-x86-64.so.2 (0x00007f2b2d96e000)
根据输出结果可以看到 not found libtinfo.so.5
解决的方法就是找一个完整的 libtinfo.so.5 库文件拷贝到这台机器上
[root@VM-16-90-centos ~]$ scp /usr/lib64/libtinfo.so.5 150.109.94.242:/root/
The authenticity of host '150.109.94.242 (150.109.94.242)' can't be established.
ECDSA key fingerprint is SHA256:cvHf/KdtbchCmajgVyG7YZqaHxtCHUrJnk114X3wVso.
ECDSA key fingerprint is MD5:b4:71:ec:b0:b1:c4:95:2b:ee:05:ff:2b:39:2b:03:73.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '150.109.94.242' (ECDSA) to the list of known hosts.
root@150.109.94.242's password:
libtinfo.so.5 100% 170KB 170.5KB/s 00:01
再回到VM-0-3-centos这台机器:
[root@VM-0-3-centos ~]$ mv libtinfo.so.5 /usr/lib64/
[root@VM-0-3-centos ~]$ mysql --version
mysql Ver 8.0.20 for Linux on x86_64 (MySQL Community Server - GPL)
至此,报错解决,可以查看 version
二、初始化数据库
需要注意的是 5.6 版本的数据库初始化跟 5.7 版本及以上的数据库初始化是不同的,演示分别如下:
5.6 版本初始化:
$ /usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
5.7 版本初始化:
$ mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
执行后可能会报错:mysqld: error while loading shared libraries libaio.so.1:cannot open shared object file:No such file or directory
解决方法:yum install -y libaio-devel
还有可能报错:mysqld: error while loading shared libraries: libnuma.so.1: cannot open shared object file: No such file or directory
可以按照上述的方法去其他机器拷贝,还可以通过以下方式解决:
$ yum install -y install numactl
[root@VM-0-3-centos mysql]$ mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
2020-08-30T09:41:01.597602Z 0 [System] [MY-013169] [Server] /usr/local/mysql-8.0.20-linux-glibc2.12-x86_64/bin/mysqld (mysqld 8.0.20) initializing of server in progress as process 12859
2020-08-30T09:41:01.614573Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2020-08-30T09:41:03.778854Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2020-08-30T09:41:05.983597Z 6 [Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
初始化完成!!!
扩展部分:
mysqld –initialize:
1)初始化完成后,会生成一个12位的临时密码(在输出的最后一句),但是必须在使用MySQL之前重置这个密码;
2)密码管理使用严格模式:3种复杂度以上,8位以上
mysqld –initialize-insecure:
不会有临时密码,可以自己进行设定,并且也没有密码复杂度的要求;
三、简易配置文件
这里为大家提供一个简单的 MySQL 配置文件,该配置文件主要由两部分组成即标签和配置参数。
cat > /etc/my.cnf [mysqld] # 服务器端标签
user=mysql # 负责数据库管理用户
basedir=/usr/local/mysql # 软件安装位置
datadir=/data/mysql # 数据的存放节点
server_id=6 # 标识节点的唯一编号(主从有用)
port=3306 # 端口号
socket=/tmp/mysql.sock # 套接字文件
[mysql] # 客户端标签
socket=/tmp/mysql.sock # mysql登录时默认读取的socket文件位置
EOF
配置文件写好之后,MySQL 安装差不多就接近尾声了,之后就只剩下启动 MySQL 啦;启动脚本:
MySQL service options:
Usage: mysql.server {start|stop|restart|reload|force-reload|status} [ MySQL server options ]
这里需要介绍 MySQL 服务的几个常用操作命令的意义:
-
start:启动 MySQL 服务 -
stop:停止 MySQL 服务 -
restart:重启 MySQL 服务 -
status:查看 MySQL 服务状态
启动 MySQL:
$ /usr/local/mysql/support-files/mysql.server start
为了方便使用,将启动脚本 cp
到系统管理软件目录中:
$ cp mysql.server /etc/init.d/mysqld
将 mysqld 添加到 systemd 中:
$ chkconfig --add mysqld
最后,需要提醒大家的是在登录前记得修改原始密码:
$ mysqladmin -uroot -p password NEW_PASS
本来主要介绍了 MySQL 二进制包的安装,对于初学者来说也推荐大家使用 RPM 包进行 Linux 平台下的安装,因为 RPM 包的安装和卸载都很方便,通过简单的命令就可以实现,对于新手来说很友好方便入门。但对于想提高自己或者想更加了解 MySQ L安装过程的同学来说,参考本篇文章的介绍会更好(上手操作一遍效果更好),本文介绍的比较详细,包括作者在安装过程中遇到的一些报错都有展现。看到这里,如果觉得本文对你有帮助记得点赞收藏!