MySQL安装完整过程
1. 安装过程
- 清理历史环境
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下上传软件,然后解压
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 -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
2. 接下来,初始化数据库:
1、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.
初始化完成
2、5.6 版本初始化:
/usr/local/mysql/scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
扩展部分:
扩展(初始化方式):
mysqld --initialize:
1)初始化完成后,会生成一个12位的临时密码(在输出的最后一句),但是必须在使用MySQL之前重置这个密码;
2)密码管理使用严格模式:3种复杂度以上,8位以上
mysqld --initialize-insecure:
不会有临时密码,可以自己进行设定,并且也没有密码复杂度的要求;
3. 配置文件
简易模版:
cat > /etc/my.cnf << EOF
[mysqld]
user=mysql
basedir=/usr/local/mysql
datadir=/data/mysql
server_id=6
port=3306
socket=/tmp/mysql.sock
[mysql]
socket=/tmp/mysql.sock
EOF
启动脚本:
/usr/local/mysql/support-files/mysql.server start
将启动脚本copy到系统管理软件目录中:
cp mysql.server /etc/init.d/mysqld
将mysqld添加到systemd中:
chkconfig --add mysqld
在登陆前修改原始密码:
命令行修改:mysqladmin -uroot -p password NEW_PASS