下载安装
1.0 下载地址
下载MySQL
历史版本地址:https://downloads.mysql.com/archives/community/
我这里下载的版本是5.7.24
https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz
或者
http://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz
1.1 查看环境下是否已经安装MySQL
rpm -qa | grep mysql
1.2 创建目录
创建目录用于存放MySQL
的各种数据:
mkdir -p /root/soft/mysql57
mkdir -p /root/soft/mysql57/conf # 配置文件
mkdir -p /root/soft/mysql57/log # 日志
mkdir -p /root/soft/mysql57/data # 数据
1.3 下载安装包
cd /root/soft/mysql57
wget https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz
1.4 解压安装包
tar -zxvf mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz
1.5 复制解压后的安装包/usr/local
目录下,并命名为mysql
cp -r mysql-5.7.24-linux-glibc2.12-x86_64 /usr/local/mysql
1.6 添加用户组mysql
# 在/usr/local目录下执行
groupadd mysql
1.7 创建用户mysql
并将其添加到用户组mysql
中
useradd -r -g mysql mysql
1.8 查看用户是否添加成功
groups mysql
1.9 赋予读写权限
[root@pophas local]# cd /usr/local/mysql/
[root@pophas mysql]# chown -R mysql:mysql ./
2.0 创建配置文件
cd /root/soft/mysql57/conf
vim my.cnf
>>>
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
character_set_server=utf8
init_connect='SET NAMES utf8'
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data/mysql
socket=/tmp/mysql.sock
log-error=/usr/local/mysql/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
#不区分大小写
lower_case_table_names = 1
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
max_connections=5000
default-time_zone = '+8:00'
my.conf
配置文件说明:
保存编辑 …
2.1 拷贝配置文件到/etc
目录下
cd /root/soft/mysql57/conf
cp my.cnf /etc
2.2 初始化数据库
2.2.1 安装 libaio
yum install libaio # 如果没有安装可能会导致初始化报错
2.2.2 创建存放错误日志的目录
mkdir -p /usr/local/mysql/log/
2.2.3 创建错误日志文件 并 赋予权限
cd /usr/local/mysql/log/
# 创建指定的文件`mysqld.log`
vim mysqld.log # >> 不需要编辑内容,直接保存退出即可
# 赋予权限
chmod 777 mysqld.log
chown mysql:mysql mysqld.log
2.2.4 初始化数据库
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --lc_messages_dir=/usr/local/mysql/share --lc_messages=en_US
2.4.5 远程交互修改密码
grant all privileges on *.* to '新用户名'@'%' identified by '新密码';
flush privileges;
2.3 查看初始密码
cat /usr/local/mysql/log/mysqld.log
root@localhost
: 这里就是初始密码
2.4 启动服务
2.4.1 创建指定的pid文件
cd /var/run/mysqld
vim mysqld.pid # >>> 内容为空,直接保存退出 :wq
2.4.2 赋予权限
chmod 777 mysqld.pid
chown mysql:mysql mysqld.pid
2.4.3 开启mysql服务
/usr/local/mysql/support-files/mysql.server start
启动成功如下图:
2.4.4 修改初始密码
# 查看初始密码
cat mysqld.log |grep root@localhost
[root@pophas mysqld]# /usr/local/mysql/bin/mysql -uroot -p
Enter password: # 这里输入初始密码
# 进入mysql的交互模式
mysql> alter user 'root'@'localhost' identified by '123456';
mysql> flush privileges;
2.5 设置开机自启
cd /usr/local/mysql/support-files
cp mysql.server /etc/init.d/mysqld
chkconfig --add mysqld
2.6 添加环境变量
vim /etc/profile
export PATH=/usr/local/mysql/bin:$PATH
source /etc/profile
2.7 使用service命令启动服务
cd /etc/init.d
如果将mysql.server
命名为mysql
,那么启动命令:service mysql start
service mysqld start
# sudo service mysqld start
2.8 使用service命令关闭服务
service mysqld stop
2.9 使用service命令重启服务
service mysqld restart
3.0 查看运行状态
service mysqld status
踩坑
1.0 初始化数据库报错
执行以下命令报错:
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --lc_messages_dir=/usr/local/mysql/share --lc_messages=en_US
错误信息:
2021-07-31T15:19:41.200872Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2021-07-31T15:19:41.202813Z 0 [ERROR] --initialize specified but the data directory has files in it. Aborting.
2021-07-31T15:19:41.202845Z 0 [ERROR] Aborting
问题原因:
由于已经完成初始化,数据目录有文件,导致被终止;
解决方案:
将数据目录下已经存在的文件全部删除掉;
rm -rf /usr/local/mysql/data/*
然后重新初始化;
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --lc_messages_dir=/usr/local/mysql/share --lc_messages=en_US
亲测有效 …
1.1 启动mysql服务报错(一)
执行以下命令报错:
[root@pophas mysqld]# /usr/local/mysql/support-files/mysql.server start
错误如下:
Starting MySQL....The server quit without updating PID file[失败]/local/mysql/run/mysqld/mysqld.pid).
思路分析:
查看日志
cd /usr/local/mysql/log
less mysqld.log
看到日志,才知道是端口被占用了,这才想起之前使用docker
部署了MySQL
;
为了不影响之前的应用,我选择修改监听端口号:3306 >> 3307
vim /etc/my.cnf >>
[client]
port = 3307 # 客户端连接端口
[mysqld]
port = 3307 # 监听端口号
然后保存退出 ;
重新执行启动命令:
[root@pophas mysqld]# /usr/local/mysql/support-files/mysql.server start
1.2 启动mysql服务报错(二)
执行以下命令报错:
[root@pophas mysqld]# /usr/local/mysql/support-files/mysql.server start
错误如下:
Starting MySQL....The server quit without updating PID file[失败]/local/mysql/run/mysqld/mysqld.pid).
思路分析:
查看日志
cd /usr/local/mysql/log
cat mysqld.log
问题:
[ERROR] Can't start server: can't check PID filepath: No such file or directory
看到日志可以知道是配置的pidfile
路径出现问题
接下来我们查看配置文件vim /etc/my.cnf
果不其然,配置文件配置的pidfile
压根就不存在;
修改为我们实际mysqld.pid
的路径:/var/run/mysqld/mysqld.pid
,然后保存退出;
然后我们重新启动服务:
[root@pophas mysqld]# /usr/local/mysql/support-files/mysql.server start
1.3 启动mysql服务报错(三)
执行以下命令报错:
[root@pophas mysqld]# /usr/local/mysql/support-files/mysql.server start
错误如下:
Starting MySQL....The server quit without updating PID file[失败]/local/mysql/run/mysqld/mysqld.pid).
思路分析:
查看日志
cd /usr/local/mysql/log
cat mysqld.log
问题
[ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist
[ERROR] Fatal error: Failed to initialize ACL/grant/time zones structures or failed to remove temporary table files
[ERROR] Aborting
思路分析:
出现这个错误的原因是配置文件的datadir设置有误,导致不能找到mysql数据库下的user表,修改配置即可。
解决方案1:
要么重新初始化,保持初始化的datadir
路径与配置文件my.cnf
的路径一致;
那么修改配置文件:
datadir=/usr/local/mysql/data
解决方案2:
需要重新对数据库进行初始化,在此之前需要删除数据目录下的所有文件
rm -rf /usr/local/mysql/data/*
然后初始化
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --lc_messages_dir=/usr/local/mysql/share --lc_messages=en_US
接下来重新启动服务:
[root@pophas mysqld]# /usr/local/mysql/support-files/mysql.server start
启动成功.
1.4 使用 use mysql; 报错
命令行如下:
mysql> use mysql;
报错信息如下:
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
思路分析:
提示要用ALTER USER修改密码才可以;
alter user 'root'@'localhost' identified by '123456';