CentOS 的 rpm 套件管理器预设没有 MySQL repository,而是预设使用 MySQL 的妹妹 MariaDB。MySQL 与 MaraiDB 用起来基本上没什麽差别,甚至连 MySQL Workbench 也通用。但是 .NET 用来与 MySQL/MariaDB 沟通的套件更新速度有差,以 .NET 5 来说,两者的 release 时间差了约 2 个月。
所以在选择 MySQL 或 MariaDB 的时候,就必须考量一下自己的情况了。MySQL 的优点是支援速度比较快,而 MariaDB 则是可以完全不用担心将来他的授权会变。本文系列选择使用 MySQL 当范例。
CentOS 预设没有包含 MySQL 在 yum 的 repository里(但是 MySQL 的妹妹 MariaDB 有),所以我们要透过 wget 来下载这个 repository。首先,先来安装 wget
sudo yum install wget
开启浏览器到 MySQL 的网站找 yum 的 MySQL repository
https://dev.mysql.com/downloads/repo/yum/
然後复制下面的 repository name
将刚刚复制的 repository name 贴到 wget 指令开始下载这个 repository 的资讯
wget https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm
Repository 的资讯下载下来之後,再把它加入 rpm 套件管理器
sudo rpm -ivh mysql80-community-release-el7-3.noarch.rpm
加入完成後开始安装 MySQL Server
sudo yum install mysql-server
一样用 systemctl 指令来启动 MySQL
sudo systemctl start mysqld
MySQL 预设会随着开机启动,所以不必再跑 systemctl enable 指令
sudo systemctl status mysqld
安装完之後,MySQL 会在 /var/log/mysqld.log 这个档案里产生一组乱数的密码,我们可以用下面的指令将它输出到萤幕上
sudo grep 'temporary password' /var/log/mysqld.log
[Note] [MY-010454] [Server] A temporary password is generated for root@localhost: 安装时产生的密码
输出之後别把画面洗掉,马上就要用到这组密码。输入下列指令开始设定 MySQL
sudo mysql_secure_installation
一开始 MySQL 会要求我们输入刚刚的预设密码,这边有点烦的是不能用复制的,要用手 key 才行。
Enter password for user root: #手动 Key 密码
认证成功之後,需要输入一组新的密码
Securing the MySQL server deployment.
Enter password for user root:
The existing password for the user account root has expired. Please set a new password.
New password:
Re-enter new password:
以前完年的帐号=root密码=root不能用了QQ…笔者自己测大概最少要 10 码而且要包含大小写英文、数字跟符号
换完密码之後,马上又会再问一次要不要换密码(有事吗…),因为我们才刚刚换过,这边就输入 N 不要
Change the password for root ? ((Press y|Y for Yes, any other key for No): N
接下来有一个选项会禁止 root 帐号从外部连线,只能从本机(VM)连,这个设定虽然会增加安全性但是颇麻烦,如果想要从外部用 root 连线,请注意下面这个设定,输入 N 让 root 保持可以对外连线。
Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? (Press y|Y for Yes, any other key for No) :
接下来除了上面的 root 对外连线看个人喜好要不要开放,其他就是一直按 y 然後 enter 就好
如果上面的设定没有阻挡 root 对外开放可以跳过这个小节,直接都用 root 帐号操作。
设定完 MySQL 之後,我们来新增一个可以从外部连进来的使用者。首先,我们要先进到 MySQL 的命列列模式,一样在 Linux shell,输入
mysql -u root -p
接着输入 root 的密码。认证成功之後,就会看到命令的开头变成
mysql>
再来,输入建立使用者的 MySQL 指令
CREATE USER '使用者名称'@'允许连线的IP' IDENTIFIED BY '使用者密码';
允许连线的 IP 可以打百分比符号(%)允许所有来源 IP 连线。例如
CREATE USER 'ironman'@'%' IDENTIFIED BY 'user_password';
接着要来填笔者自己造的坑(跪)。笔者在自己的电脑是使用 installer 安装整套 Developer Default,里面包含了一个范例资料库 “world”,但是在 CentOS 用 yum 装不会有这个范例资料库,所以我们要手动把它建出来,这样前几天的 SQL 脚本才不会出错(再跪QAQ)。
CREATE SCHEMA `world` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci ;
建立使用者之後,要赋予这个使用者权限,为了方便 demo,这边笔者直接给全部权限
GRANT ALL PRIVILEGES ON world.* TO 'ironman'@'%';
这边说明一下,上面指令的 ON 後面要接 「资料库.资料表」,星号代表这个资料库底下的资料表全给;TO 後面的是使用者名称,小老鼠後面一样是来源 IP。一次给全部权限不是很好的做法,正常的情况会根据不同的工程师给对应的权限,这时候就需要用以下语法分别给权限
GRANT SELECT, INSERT,...其他权限 ON 资料库名称.资料表名称 TO '使用者名称'@'允许的IP来源';
完整的权限列表请参考 MySQL 官方文件
MySQL server 端的工作搞定了,接下来我们要开启防火墙,让我们从自己的电脑用 MySQL Workbench 连线。请参考本系列的 Day13 把 mysql 的 3306 port 打开。
打开之後就能用刚刚创的使用者帐号登入。
登入之後,我们要来把之前在本机建的表还有资料汇入到 VM 上的 MySQL。首先,打开本机的连线,然後点上方的 Server 选单 -> Data Export
选一下要汇出的资料表以及输出路径
接下来点 Start Export,这个按钮很雷,萤幕太小的话会被 SQL 执行的 Output 视窗遮住,用笔电的邦友可能要调整一下 Output 视窗才能看到这个按钮。
汇出完成後,切换到 VM 上的 MySQL 连线,一样在 Server 选单,选 Data Import。然後浏览资料夹选一下刚刚汇出的档案,再点 Start Import。
首先 SSH 连上 VM,更新一下程序码
cd /ironman/dotnet_api/IThomeIronman/
sudo git pull
再来用 vim 编辑正式环境用的 appsettings.json
sudo vi /ironman/dotnet_api/IThomeIronman/Ithome_2021_API/appsettings.json
"MySqlOptions": {
"ConnectionString": "Server=localhost;Database=world;Uid=root;Pwd=安装时设定的密码;"
}
然後重新发布 API 程序并重启
sudo dotnet publish -c Release
sudo systemctl restart ironman_api
一切就绪之後,再到我们的浏览器打打看 https://之前申请的域名/api/User,应该就能看到我们 API 从 MySQL 捞资料然後回传给我们
到此,架站、API、资料库等躲在前端页面後的东西大致上都完成了,明天开始,我们即将开始介绍网页的前端。
<<: [早餐吃到饱-3] 温莎咖啡厅 - 裕元花园酒店 Breakfast Buffet at Windsor Hotel in Taichung
「你又在看什麽? 我已经气到不想跟你说话了。」 『我才气好吗? 别生气啦...我把现在这个看完好吗...
写出不乾净的code跟WEED一样 一开始写的时候可能会感到轻松快乐 但是後续的维护或修改会把自己搞...
Youtube 频道:https://www.youtube.com/c/kaochenlong ...
前言 为什麽要特别提一下 Payload ? 是因为像 mutations 跟 actions,其实...
为了提升 WordPress 站台安全性,我安装了防火墙及防毒外挂 Wordfence,此外挂提供了...