yokila
yokila
Published on 2024-03-13 / 23 Visits
0
0

Linux MySQL安装及初始化

零、前言

本文基于环境:Ubuntu 22.04.1 LTS (GNU/Linux 5.15.0-60-generic x86_64)

本文基于的MySQL版本:8.0

MySQL的官方文档链接:MySQL Documentation

本文的安装方式:APT

一、什么是MySQL

MySQL的官方读法:“My Ess Que Ell” (但是官方也不在意大家读成:“my sequel”)

官网完整介绍:What is MySQL?

简单描述:一个开源的SQL关系型数据库管理系统,由Oracle公司开发、发布、支持。

SQL:Structured Query Language

MySQL软件基于的开源协议:GPL (GNU General Public License)

二、安装MySQL的全流程纪实

官方操作流程文档:A Quick Guide to Using the MySQL APT Repository

特别注意:如果先前已经安装过MySQL,则需要看官方的其他教程:

使用 MySQL APT 存储库替换 MySQL 的本机发行版 替换直接软件包下载安装的MySQL服务器deb

2.1 连接服务器

首先,用你的SSH客户端连接到服务器上。比如,我用的是极为简约的 OpenSSH Client,实际你想用哪个SSH客户端都行。

(如果你本地正在操作的就是要安装MySQL的Linux机器,那当我没说)

2.2 新增 MySQL APT 存储库

通过浏览器进入 MySQL 的 APT 存储库配置下载页面

image-fsot.png

点击按钮“Download”

image-snsk.png

鼠标放在下图中圈出来的这句话上,点击鼠标右键,然后选择“复制链接”。

先找一个文件夹,在底下创建临时目录,执行命令:mkdir temp

进入这个新建的临时目录,执行命令:cd temp

下载刚刚的那个deb软件包到本地,执行命令:wget https://dev.mysql.com/get/mysql-apt-config_0.8.29-1_all.deb 

命令解析:

wget:Linux上一个下载文件的工具,没安装的话建议去安装一个,很好用。

https://dev.mysql.com/get/mysql-apt-config_0.8.29-1_all.deb:即刚刚复制的deb文件的下载链接。请依据前文去官网获取最新的链接,本文示例的链接可能会是过期的链接。wget会自动把下载下来的内容放入到 下载链接的最后一个斜杠后的内容 作为文件名的文件中。

执行命令:sudo dpkg -i mysql-apt-config_0.8.29-1_all.deb

注意:mysql-apt-config_0.8.29-1_all.deb 是刚刚下载下来的deb文件的文件名

执行期间会出现以下的设置页面。

按方向键到达指定项后,摁键盘的回车键,则会进入对应的菜单页面。

例如在上图情况下,摁键盘的回车键,则将进入下图页面。

如果是新手,建议选择好要安装的MySQL的版本即可,后面的两项保持默认。

如果确定不需要后面两项额外的内容,就可以像我一样:

选中 ok,然后摁键盘的回车键就好了。

可以通过命令检查是否已经配置好,执行命令:dpkg -l | grep mysql

从 MySQL APT 存储库更新包信息,执行命令:sudo apt update

此时,刚刚下载下来的deb软件包就没用了,可以删除了(包括temp目录)。

2.3 使用APT安装MySQL

执行命令:sudo apt install mysql-server

过程中,输入Y

安装过程中,MySQL会要求设置 root 账号的密码。L这个密码很重要,不能忘。(如果暂时不想设置,可以直接在密码输入框留空)

安装的是8.0以后的版本会有上图页面,主要就是说身份验证更新了,如果是早期的连接器或者驱动程序或客户端,可能不支持这个新的身份验证。如果是新的就支持。

如果你是从零开始学,那么大可直接选新的更安全的身份验证方式(毕竟你的配套的东西都是新的,肯定能支持)。

如果已有项目用的是5.x版本的连接器或者驱动程序啥的,那就选择旧版的身份验证方式,避免不兼容的情况发生。

不过,如果最后实际发现还是出现了问题,则可以去 /etc/mysql/mysql.conf.d/default-auth-override.cnf 文件里改这个配置值。

选择好以后,摁键盘的回车键,就会继续安装,直到安装结束。

安装好以后,MySQL服务器会自动启动。

通过命令,可以看到MySQL的服务信息,执行命令:

systemctl status mysql

三、配置及使用(均为在安装MySQL的机器上执行命令)

3.1 连接MySQL服务器

详细请看官方文档:Connecting to and Disconnecting from the Server

执行命令:

mysql -u root -p

(如果是按照前文步骤执行到现在,肯定是这个命令,因为现在只有这个账号)

按照要求,输入前面安装时设置的密码

(如果前面安装的时候没设置,那么就直接摁键盘回车)

(此处密码是不会回显的,需要格外注意)

(输入完密码后,摁键盘回车)

3.2 设置MySQL服务器的时区

官方文档对时区的说明:MySQL Server Time Zone Support

执行命令:

show variables like '%time_zone%';

system_time_zone:系统时区。这个值是MySQL启动时从所处的机器上读取的,即便后面系统的时区变了,只要MySQL不重启,就不会重新读取系统时区进行更新。(变更系统时区,MySQL是否真的不会跟着变,可以自行实验验证)

CST:时区缩写。有好几种可能:可视为中国、古巴的标准时间或美国、澳大利亚的中部时间。具体你执行一下命令( select now();)就知道现在用的是哪个了。

比如我这个时间是准确的:

time_zone:当前MySQL用的是哪个时区。

SYSTEM:用的是启动时读取的系统的时区。

问题解答:

  • 这里为什么要手动去设置时区?

因为你不能保证MySQL永远不会进行重启,重启前系统的时区永远不会被改变。

还有一件事,最好不要用CST,毕竟这东西有好几种含义,据网友说容易出bug(不同程序可能默认的理解不同)。

  • 如果MySQL的时区和系统时区产生了不一致,会有什么问题?

举个例子:程序里使用了系统时间作为操作时间,录入到数据库。MySQL执行SQL脚本,使用了 now(),此时录入到数据库的是MySQL的时间。两个时间此时就产生了偏差。

话又说回来,如果你不想变,也行。只是需要注意前面说的,能保持一致就行。

如果想显式地永久设置MySQL的时区,则可以按照以下步骤进行。

先退出MySQL服务器的连接,执行命令:

exit

查找MySQL的配置文件,执行命令:

sudo find / -name my.cnf

重点是其中的 /etc/mysql/my.cnf 这个文件。

关于MySQL读取配置文件的选项和优先级顺序,可阅读官方文档:Using Option Files

执行编辑命令,编辑这个MySQL的配置文件:

sudo vi /etc/mysql/my.cnf

(默认可能没有内容)

新增内容(按 进入编辑模式,然后按方向键到空白行,点击鼠标右键就会粘贴上去):

[iclient]
# 设置mysql客户端默认字符集
default-character-set=utf8

[mysqld]
# 设置3306端口
port = 3306
# UTF8M4是mysql推荐的字符集
character-set-server=UTF8MB4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
# 设置时区为东八区
default-time-zone='+8:00'

其中,最后一行是重点(你也可以设置成其他时区),其他的只是附带顺便显式设置。

注意写配置项前, [mysqld] 这些section是一定要带上的,因为这是配置文件的格式。

修改后:

注意保存修改的内容(按ESC,然后输入:wq,再按回车键)。

重启MySQL让刚刚的修改生效:

sudo systemctl restart mysql

再次连接到MySQL服务器,查看修改是否成功。

修改后:

可以看到,现在是我们前面显式配置的东八区时间。

注:虽然读取到的系统时间还是CST,但是无所谓,因为实际不用这个时间,实际依据的是time_zone这个值的信息。

3.3 新建数据库

本地连接数据库:

mysql -u root -p

其实这个不需要讲的,因为这个只是一句SQL语句的执行。

为了下面创建新用户授权,所以还是执行一下示例:

create database happy_test2;

注:其中 happy_test2 是要新建的数据库的名字

3.4 新建用户并授权

请参照我写的另一篇文章(MYSQL8.0新建用户并授予权限流程),虽然是在Windows环境上执行的命令行,但是没啥区别。

额外说明:安全起见,不建议允许除本机以外的地址登录root账号。

额外说明:一定要至少提供给新用户一些操作数据库的权限。例如新建数据库或者只能操作某个数据库的权限。不然这个账号就没意义了。

额外补充-修改密码:

alter user '用户名'@'可访问host' identified with mysql_native_password by '新密码';

示例:

alter user 'happytest'@'%' identified with mysql_native_password by 'abc1234';

注意修改密码后,要执行一下:

flush privileges;

四、远程连接(MySQL Workbench)

注意:先确保防火墙(如果是云服务器则还有安全组),开放允许外部访问 3306 端口。

检查Linux防火墙是否允许访问(命令:sudo ufw status

Ubuntu防火墙允许外部访问3306端口:sudo ufw allow 3306

Ubuntu防火墙删除增加的3306规则:sudo ufw delete allow 3306

如果你用的不是 MySQL Workbench,这里就不用看了。

在Windows上,打开 MySQL Workbench。(什么?你没安装?那速速去下载安装,这个没啥可教的)

点击下图中的这个符号:

在弹出框内设置好连接的信息,然后点击 Test Connection 测试一下是否能够连通。

(如果当下没有可操作的数据库,就不要填写 default Schema 项,否则会出现 Access deny

如果没有输入密码,则会出现弹窗要求输入密码。(如果想保存密码,以后不再要求输入,则可以勾选下面的选项)

连接成功则会如下图:

此时,点击这里的OK 按钮。

此时页面会出现新的连接项:

点击即可进入操作界面了:

接下来就是常规的GUI交互和写SQL语句了。


Comment