linux上部署mysql
1. mysql文件下载
- 下载地址:https://downloads.mysql.com/archives/community/
- 选择版本
- 下载文件:
2. 安装前准备
2.1 安装文件上传
把文件上传到自己想安装的目录,解压、重命名;建议目录(/usr/local/mysql)
tar -zxvf mysql-5.7.33-el7-x86_64.tar.gz # 解压
rm -rf mysql-5.7.33-el7-x86_64.tar.gz # 删除安装包
mv mysql-5.7.33-el7-x86_64/ mysql # 重命名
2.2 创建用户
groupadd mysql # 创建mysql用户组
useradd -g mysql mysql # 创建mysql用户并分配到mysql用户组
2.3 配置文件配置
配置文件目录:/etc/my.cnf(这是centos的目录)
##########以下配置文件为默认配置,系统自带的########
[client]
# 默认连接端口
port = 3306
# 用于本地连接的socket套接字
socket = /var/lib/mysql/mysql.sock
# 字符集编码
default-character-set = utf8mb4
# 系统服务端配置
[mysqld]
# mysql数据存放目录
basedir = /usr/local/mysql
datadir=/usr/local/mysql/data # data目录若没有需要手动创建
# 为MySQL客户端程序和服务器之间的本地通讯指定一个套接字文件
socket=/var/lib/mysql/mysql.sock # 若目录本身没有需要手动创建
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
default-character-set = utf8mb4
[mysqld_safe]
log-error=/var/log/mysql/mysql.err # 需要手动创建目录和文件
pid-file=/usr/local/mysql/data/mysql.pid
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
以上配置为基础配置。
2.4 所需文件、目录创建以及权限赋值
以我的安装实例为例,所需处理的目录如下:
- socket套接字地址:socket = /usr/local/mysql/data/mysql.sock
- 安装目录:basedir = /usr/local/mysql
- 数据目录:datadir=/usr/local/mysql/data
- 错误日志目录:log-error=/var/log/mysql/mysql.err
- pid文件目录:pid-file=/usr/local/mysql/data/mysql.pid
以上所有目录均需要赋予读写权限给mysql用户, 错文日志文件mysql.err需要手动创建
cd /usr/local
chown -R mysql:mysql mysql/
cd /var/lib/
mkdir mysql
chown -R mysql:mysql mysql/
cd /var/log
mkdir mysql
chown -R mysql:mysql mysql/
cd /var/log/mysql
touch mysql.err
3. 安装、初始化
初始化
cd /usr/local/mysql/bin
./mysqld --initialize --user=mysql --datadir=/usr/local/mysql/data --basedir=/usr/local/mysql --pid-file=/usr/local/mysql/data/mysql.pid
初始化的时候,记住生成的初始密码:
启动mysql服务
/usr/local/mysql/support-files/mysql.server start
报错如下:
Starting MySQL. ERROR! The server quit without updating PID file (/usr/local/mysql/data/localhost.localdomain.pid).
这个报错的原因为错误日志文件没有mysql用户写入权限。添加写入权限后即可成功:
如上图所示则表示mysql服务已经启动成功。
4. 密码修改、远程连接配置
搞两个软链接:
ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql
ln -s /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
登录:密码为初始化时产生的密码
[root@localhost data]# mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.33
Copyright (c) 2000, 2021, Oracle and/or its affiliates.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
修改root密码:
mysql> set password for root@localhost = password('xxxx');
Query OK, 0 rows affected, 1 warning (0.07 sec)
开放远程连接:
mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> update user set user.Host='%' where user.User='root';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
完成上述配置后,可以通过客户端工具连接数据库,我这边使用的是dbeaver
但是这边遇到如下错误
经过查看,服务正常启动,端口也是正常开放的
不过,经过测试,远程telnet并不通:
排查原因为:防火墙禁止了访问
处理方法:关闭防火墙(我这是测试、生产不建议)
systemctl stop firewalld
后续还是会报错
这个报错解决办法:在配置文件里添加下面字段,可以在认证的时候跳过密码。
skip-grant-tables
后面在网上找了一些方法,最后可用的是:
赋予权限不足,重新赋予权限并刷新权限表再重新连接即可:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'hyg403664340' WITH GRANT OPTION;
flush privileges;
踩坑一个:
报错:ERROR 1820 (HY000): You must reset your password using ALTER USER statement before
解决方法:ALTER USER USER() IDENTIFIED BY ‘wingkin45’;#wingkin为密码
over