零、前言
本文基于环境: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 存储库配置下载页面:
点击按钮“Download”
鼠标放在下图中圈出来的这句话上,点击鼠标右键,然后选择“复制链接”。
先找一个文件夹,在底下创建临时目录,执行命令: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
(默认可能没有内容)
新增内容(按 i 进入编辑模式,然后按方向键到空白行,点击鼠标右键就会粘贴上去):
[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语句了。