From:https://www.cnblogs.com/tothk/p/16298333.html
安装环境
Linux:Debian10.12
MySQL:mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz
SSH工具:Xshell 7,Xftp 7
环境依赖
前置要求:Debian镜像是国内的,直达车–>Debian修改国内镜像源
- MySQL 依赖于该
libaio库。 - 对于 MySQL 5.7.19 及更高版本:对非统一内存访问 (NUMA) 的支持已添加到通用 Linux 构建中,它现在依赖于
libnuma库; - SLES 11:从 MySQL 5.7.19 开始,Linux Generic tarball 包格式为 EL6 而不是 EL5。作为副作用,MySQL 客户端 bin/mysql需要
libtinfo.so.5.- 一种解决方法是创建一个符号链接,
- 在 64 位系统上:ln -s libncurses.so.5.6 /lib64/libtinfo.so.5
- 在 32位系统上:ln -s libncurses.so.5.6 /lib/libtinfo.so.5
- 但是在Debian上这个解决方式好像没有用,我试过但是任然报错,最后还是安装libncurses5解决了,libncurses6也行
|
1 2 3 4 |
# 注意,本次教程全程在root用户账号下安装 su - # 输入root密码 apt-get install -y libaio1 libaio-dev libnuma1 libncurses5 wget vim |
MySQL二进制安装包获取
- 用wget从网上下载
|
1 2 3 4 5 |
# MySQL官方源地址,因为是国外源,非常慢,通常500Kb/s左右 wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz # 163网易镜像地址,国内源,非常快 wget https://mirrors.163.com/mysql/Downloads/MySQL-5.7/mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz |
- 利用Xftp上传本地压缩包,happy~~

总之,最后在/root目录下我们会得到这样一个压缩包

安装包的处置
|
1 2 3 4 5 6 |
# 解压安装包 tar -zxvf mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz # 移动并重命名 mv mysql-5.7.36-linux-glibc2.12-x86_64 /usr/local/mysql # 进入目标目录 cd /usr/local/mysql |
输入ls -lh,你会看到如下目录:

创建MySQL用户和组
|
1 2 3 4 |
groupadd mysql # 因为用户仅用于所有权目的,而不是登录目的,所以useradd命令使用 -r和-s /bin/false选项 useradd -r -g mysql -s /bin/false mysql |
创建指向安装目录的符号链接
|
1 2 3 4 5 6 |
# 为了避免在使用 MySQL 时总是输入客户端程序的路径名,可以将/usr/local/mysql/bin 目录添加到PATH变量中 vim /etc/profile # 在文件尾部加上如下代码后保存退出,一定要是最末尾 export PATH=$PATH:/usr/local/mysql/bin # 刷新文件,使配置生效 source /etc/profile |

创建相应目录并赋予合适权限
|
1 2 3 4 |
mkdir -p /usr/local/mysql/data /usr/local/mysql/log chown mysql:mysql -R /usr/local/mysql/data /usr/local/mysql/log chmod 750 /usr/local/mysql/data /usr/local/mysql/log # 如果你挂载了额外的硬盘,自己手动改写路径 |
然后你会得到这样一个目录,注意看data和log文件夹的权限、属性

配置my.cnf配置文件
|
1 |
vim /etc/my.cnf |
配置文件内容以及详解如下
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
[mysqld] # 设置能访问数据库的ip地址 0.0.0.0代表无限制 bind-address=0.0.0.0 # mysqld 服务端监听端口 port=3306 # mysql数据库运行所使用的用户 user=mysql # mysql安装位置 basedir=/usr/local/mysql # 数据库存放位置 datadir=/usr/local/mysql/data # 本地连接的 socket 套接字 socket=/tmp/mysql.sock # 错误日志存放位置 log_error=/usr/local/mysql/log/mysql.err # 错误日志等级 log_warnings = 2 # pid-file文件位置 当MySQL实例启动时,会将自己的进程ID写入一个文件中——该文件即为pid文件 pid_file=/usr/local/mysql/mysql.pid # 默认字符集设置,mysql无脑utf8mb4就对了,别杠,杠就是你对,别问,问就是不知道 character_set_server=utf8mb4 # 数据库字符集对应排序规则,需要与字符集一一对应 # 对于utf8常用的排序规则可以看这个网址:https://blog.csdn.net/qq_17555933/article/details/101445526 collation_server = utf8mb4_unicode_ci # 设置 client 连接 mysql 时的字符集,防止乱码 init_connect='SET NAMES utf8mb4' # 是否对 sql 语句大小写敏感,1 表示不敏感 lower_case_table_names = 1 # 禁止mysql使用软连接 symbolic_links=0 # https://www.cnblogs.com/zqifa/p/mysql-3.html 自己去看 explicit_defaults_for_timestamp=true |
无解释注释版本
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
[mysqld] bind-address=0.0.0.0 port=3306 user=mysql basedir=/usr/local/mysql datadir=/usr/local/mysql/data socket=/tmp/mysql.sock log_error=/usr/local/mysql/log/mysql.err log_warnings = 2 pid_file=/usr/local/mysql/mysql.pid character_set_server=utf8mb4 collation_server = utf8mb4_unicode_ci init_connect='SET NAMES utf8mb4' lower_case_table_names = 1 symbolic_links=0 explicit_defaults_for_timestamp=true |
: 进入命令模式 x 保存退出

初始化mysql
|
1 |
mysqld --defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql --initialize |
查看密码
|
1 |
cat /usr/local/mysql/log/mysql.err |

设置MySQL服务
设置开机自启动
|
1 2 3 4 5 6 7 8 9 10 11 12 13 |
# 将mysql.server放置到/etc/init.d/mysql中 cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld # 赋予可执行权限 chmod +x /etc/init.d/mysqld # 添加服务 sysv-rc-conf mysqld on # 显示服务列表 sysv-rc-conf --list # 如果看到mysql的服务,并且3,4,5都是开的话则成功,如果是关,则键入 sysv-rc-conf --level 345 mysqld on # 有些人设置的mysql,都一样,服务名字而已 |
- Tip:RedHot系列的chkconfig在Debian系列中没有,相应的是sysv-rc-conf

启动MySQL
|
1 |
service mysql start |
无任何输出则说明启动成功
查看mysql进程
|
1 |
ps -ef|grep mysql |

初次设置可能会有很多服务,一般情况下只有最后一个服务
登陆MySQL,使用前面那个随机生成的密码
注意!这个密码只能登录一次,登录后不立马修改密码的话,这个密码就会失效!
如果你不慎已经退出来了! 用我们刚刚查看初始随机密码的命令:cat /usr/local/mysql/log/mysql.err 再看一次!mysql在你使用初始密码登录退出并且没有修改初始密码的情况下,会再一次生成密码

修改root密码
|
1 2 3 |
SET PASSWORD = PASSWORD('123456'); ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER; FLUSH PRIVILEGES; |

验证刚刚改的密码是否可行

开放端口
安装UFW
UFW或Uncomplicated Firewall是iptables一个接口,旨在简化配置防火墙的过程。 虽然iptables是一个可靠而灵活的工具,但初学者很难学会如何使用它来正确配置防火墙。 如果您希望开始保护网络并且不确定使用哪种工具,UFW可能是您的正确选择。
|
1 |
apt-get install -y ufw |
开放对应端口
如果我们现在启用了我们的UFW防火墙,它将拒绝所有传入的连接。 这意味着,如果我们希望服务器响应这些类型的请求,我们将需要创建明确允许合法传入连接的规则 – 例如SSH或HTTP连接。 如果您使用的是云服务器,则可能需要允许传入的SSH连接,以便连接和管理服务器
|
1 2 3 4 5 |
# 开放对应端口 ufw allow 22 ufw allow 3306 # 启用ufw,您将收到一条警告,指出该命令可能会破坏现有的SSH连接。 我们已经设置了允许SSH连接的防火墙规则,因此可以继续 ufw enable |
远程连接
root用户是默认不允许远程连接的,如果你现在远程连接,会报如下错误:

解决办法:
- 本地(Linux服务器上)root用户登录mysql
- 输入以下sql命令
|
1 2 3 4 |
use mysql # 使root能再任何host访问 update user set host = '%' where user = 'root'; FLUSH PRIVILEGES; |

Ok
