下载 MySQL 服务端软件
MySQL 软件分为服务端与客户端两个部分,本专栏中的 MySQL Server 部署在 Debian 服务器中,Client 使用的是 Windows 平台的 IDE:DataGrip。
我们首先去 官网 (downloads.mysql.com) 选择合适的 MySQL 安装包,根据自己服务器的体系结构选择合适的 5.7 版本进行下载:
以本人为例,我的服务器 CPU 架构是 x86_64,所以这里选择 mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz。复制其下载链接,在终端执行以下命令:
1
2
| wget #{url}
# 例如:wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz
|
下载完成后,校验文件完整性,执行以下命令:
1
2
| md5sum -b #{MySQL 软件包文件名}
# 例如:md5sum -b mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz
|
得到文件的 MD5 后,与官网给出的 MD5 对比,如果一致就进行下一步,否则删除下载的内容,重试直到 MD5 一致。
安装 MySQL 服务端软件
下载完成后,创建 MySQL 服务的安装目录以及数据的存放目录,并创建 MySQL 专用的用户和组:
1
2
3
| mkdir -p /usr/local/mysql/data
groupadd mysql
useradd -r -g mysql mysql
|
然后,将下载的 MySQL 服务端软件解压到刚刚创建的目录:
1
2
| tar xzvf mysql-5.7.37-linux-glibc2.12-x86_64.tar.gz -C /usr/local/mysql --strip-components 1
# --strip-components 1 表示去掉压缩包的第一级根目录
|
最后,设置 MySQL 软件的用户与组:
1
| chown -R mysql:mysql /usr/local/mysql
|
初始化数据库文件
进入 MySQL 安装目录,利用 mysqld 工具初始化数据库:
1
2
| cd /usr/local/mysql/bin
./mysqld --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --initialize
|
--user=mysql
:指定 MySQL Server 所属用户--basedir
:指定 MySQL 软件根目录--datadir
:指定 MySQL 数据目录--initialize
:执行数据库初始化流程
可能的异常
- error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory
- 解决办法:
apt install libaio1 -y
- error while loading shared libraries: libnuma.so.1: cannot open shared object file: No such file or directory
- 解决办法:
apt install libnuma1 -y
注意:apt
为 Debian 系发行版下的特有的包管理工具,如果您使用的是 CentOS 等发行版,请查询对应的命令。
安装完成后,终端会有如下打印:
1
2
3
4
5
6
7
8
9
10
| 2021-10-30T09:42:08.622353Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2021-10-30T09:42:08.622719Z 0 [ERROR] Can't find error-message file '/usr/local/mysql/share/errmsg.sys'. Check error-message file location and 'lc-messages-dir' configuration directive.
2021-10-30T09:42:10.168163Z 0 [Warning] InnoDB: New log files created, LSN=45790
2021-10-30T09:42:10.365452Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2021-10-30T09:42:10.479418Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.
2021-10-30T09:42:10.489199Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2021-10-30T09:42:12.109523Z 0 [Warning]
2021-10-30T09:42:12.109587Z 0 [Warning]
2021-10-30T09:42:12.117694Z 0 [Warning] CA certificate ca.pem is self signed.
2021-10-30T09:42:13.015521Z 1 [Note] A temporary password is generated for root@localhost: !Y!j=<i31xwh
|
我们重点关注最后一行:root@localhost: !Y!j=<i31xwh
,这是 MySQL 初始化后,默认创建的一个只允许本地访问的管理员账户。
配置 MySQL 服务端
首先在 /etc
目录下创建 my.cnf 用户配置文件:
输入以下内容:
1
2
3
4
| [mysqld]
port=33333
bind-address=0.0.0.0
lower-case-table-names=1
|
bind-address
:绑定所有地址,以支持远程访问;port
:由于站长的服务部署在公网,所以这里修改了默认端口号,否则很容易被黑客攻击;lower-case-table-names
:上文在执行 mysqld --initialize
初始化命令时,将其默认值设置成了 1,但对 MySQL Server 来说,其默认值却是 0,所以这里必须在 my.cnf 中显式地将其置为 1,否则会由于不统一造成启动失败。
然后将 MySQL 自带的支持文件 mysql.server 复制到 init.d 下,用于配置自启动:
1
2
3
| cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod 755 /etc/init.d/mysqld
systemctl daemon-reload
|
最后,启动 MySQL 并设置开机自启:
1
2
| service mysqld start
systemctl enable mysqld.service
|
至此,MySQL 服务端的配置就完成了。
创建支持远程访问的普通用户
首先通过 localhost 连接 MySQL Server:
1
2
| /usr/local/mysql/bin/mysql -uroot -p
Enter password: # 按照提示输入上边初始化时打印的密码。
|
可能的异常
Mysql Client 运行时依赖字符终端处理库 libncurses,执行上述命令时可能会提示该动态库缺失:error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory
- 解决办法:
apt install libncurses5 -y
连接成功后,首先要修改 root 账户的默认密码,否则会提示无法继续操作:
1
| ALTER USER USER() identified by 'Xjskdjhf87_hjsdkh'; --密码换成自己的强密码
|
最后,新建一个用于远程访问的普通用户,并授权:
1
2
3
4
5
6
| -- 新建用户 mysql_test_user
CREATE USER 'mysql_test_user'@'%' IDENTIFIED BY 'ASFH89f73h24r23hs_ksdf';
-- 授权
GRANT ALL ON *.* TO 'mysql_test_user'@'%' WITH GRANT OPTION;
-- 更新
flush privileges;
|
- 注意:将以上用户名
mysql_test_user
替换成自己的登录用户名,同时将密码 ASFH89f73h24r23hs_ksdf
替换成自己的强密码。
至此,MySQL 的服务端就装配完毕了。
通过 DataGrip 连接数据库
- Host:MySQL 服务器 IP 地址;
- Port:上文自定义的 MySQL 服务端口号;
- User:上文设置的新用户的用户名;
- Password:上文设置的新用户的密码。
连接好后,就可以在 DataGrip 的 console 输入命令了。