這一篇文章主要介紹如何在Vapor項(xiàng)目中連接mysql數(shù)據(jù)庫(kù)弹砚。MySQL相信是大家最常用的數(shù)據(jù)庫(kù)之一了双仍,幾乎每個(gè)公司都有用到這個(gè)數(shù)據(jù)庫(kù),如果你對(duì)于數(shù)據(jù)庫(kù)的選擇相對(duì)保守桌吃,那么mysql是個(gè)不錯(cuò)的選擇朱沃。
在前幾篇中我介紹了PostgreSQL和MongoDB的連接:
Vapor奇幻之旅(05 Fluent)
Vapor奇幻之旅(06 PostgreSQL)
Vapor奇幻之旅(07 連接服務(wù)端PostgreSQL)
Vapor奇幻之旅(08 連接服務(wù)端MongoDB)
如果你看了前幾篇,應(yīng)該知道連接數(shù)據(jù)庫(kù)遵循以下套路:
1、安裝配置好服務(wù)器逗物,并提供外部訪問的端口和權(quán)限呕屎。
2、添加相應(yīng)的數(shù)據(jù)庫(kù)的provider敬察,provider會(huì)提供連接數(shù)據(jù)庫(kù)的driver和對(duì)數(shù)據(jù)庫(kù)的相關(guān)操作的支持。
3尔当、項(xiàng)目里配置provider莲祸,并提供數(shù)據(jù)庫(kù)的主機(jī)、用戶名椭迎、密碼锐帜、端口等信息。
4畜号、測(cè)試連接缴阎。
本篇也將按照這個(gè)順序介紹如何連接MySQL數(shù)據(jù)庫(kù)。
1简软、安裝配置MySQL
這一篇我還是介紹如何在ubuntu16.04上安裝MySQL:
安裝命令:
$ sudo apt-get update
$ sudo apt-get install mysql-server
$ mysql_secure_installation
第三個(gè)命令是安全相關(guān)的蛮拔,根據(jù)自己的需要配置密碼強(qiáng)度等信息。
安裝好之后測(cè)試登陸一下:
$ mysql -u root -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.21-0ubuntu0.16.04.1 (Ubuntu)
Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
接著運(yùn)行
$ netstat -ntpl
可以看到mysql已經(jīng)在運(yùn)行痹升,且使用的是3306接口:
但是本地ip地址是127.0.0.1建炫,表示只能本地訪問,于是需要修改/etc/mysql/mysql.conf.d/mysqld.cnf配置文件:
$ vim /etc/mysql/mysql.conf.d/mysqld.cnf
如果安裝的是mysql5.6或者更低的版本疼蛾,配置文件在 /etc/mysql/my.cnf這個(gè)文件里
$ vim /etc/mysql/my.cnf
修改里面的
bind-address = 0.0.0.0
修改完保存退出肛跌,重啟mysql服務(wù)
$ sudo service mysql restart
在運(yùn)行
$ netstat -ntpl
可以看到本地ip已經(jīng)變成0.0.0.0了
這時(shí)到阿里控制臺(tái)安全組添加3306接口的入方向授權(quán),如果用的其他服務(wù)器察郁,也需要添加允許端口訪問的規(guī)則衍慎。
到這里我們的服務(wù)端的mysql就裝好了。
2皮钠、配置MySQLProvider
在運(yùn)行項(xiàng)目前,和PostgreSQLProvider需要CPostgreSQL庫(kù)一樣稳捆,MySQLProvider也需要為系統(tǒng)安裝CMySQL庫(kù),這樣項(xiàng)目才能夠被成功編譯:
MacOS:
brew install vapor/tap/cmysql
Ubuntu:
sudo apt-get install cmysql
- 1、配置Package.swift
// swift-tools-version:4.0
import PackageDescription
let package = Package(
name: "VaporMySQL",
products: [
.library(name: "App", targets: ["App"]),
.executable(name: "Run", targets: ["Run"])
],
dependencies: [
.package(url: "https://github.com/vapor/vapor.git", .upToNextMajor(from: "2.1.0")),
.package(url: "https://github.com/vapor/fluent-provider.git", .upToNextMajor(from: "1.3.0")),
.package(url: "https://github.com/vapor/mysql-provider", .upToNextMajor(from: "2.0.0"))
],
targets: [
.target(
name: "App",
dependencies: ["Vapor", "FluentProvider", "MySQLProvider"],
exclude: ["Config", "Database", "Localization", "Public", "Resources"]
),
.target(name: "Run", dependencies: ["App"]),
.testTarget(name: "AppTests", dependencies: ["App", "Testing"])
]
)
接著生成xcode項(xiàng)目
$ vapor xcode
對(duì)于已有的項(xiàng)目進(jìn)行更新即可
$ vapor update
- 2麦轰、眷柔、在Config+Setup.swift中添加provider
import FluentProvider
import MySQLProvider
...
/// Configure providers
private func setupProviders() throws {
try addProvider(FluentProvider.Provider.self)
try addProvider(MySQLProvider.Provider.self)
}
3、添加Config/mysql.json文件原朝,并配置內(nèi)容:
{
"hostname": "xxx.xxx.xxx.xxx",
"user": "root",
"password": "*******",
"database": "mysql"
}
4驯嘱、運(yùn)行程序,測(cè)試接口喳坠。
將targert設(shè)置為run鞠评,運(yùn)行設(shè)備選擇My Mac,如果選擇了連接Mac的iphone,會(huì)報(bào)錯(cuò)的壕鹉。
執(zhí)行插入操作:
執(zhí)行查詢操作:
3剃幌、Trouble Shooting
- 無法連接上服務(wù)器
1聋涨、服務(wù)端運(yùn)行netstat -ntpl 查看是否mysql本地ip是0.0.0.0,否則修改mysql的配置文件中的bind-address為0.0.0.0并重啟mysql服務(wù)
2负乡、檢查是否添加安全組牍白,如阿里云的安全組規(guī)則,添加3306接口的訪問權(quán)限
3抖棘、進(jìn)入服務(wù)端的mysql數(shù)據(jù)庫(kù)茂腥,查詢用戶權(quán)限:
mysql> select host, user from user;
+-----------+------------------+
| host | user |
+-----------+------------------+
| % | root |
| localhost | debian-sys-maint |
| localhost | mysql.session |
| localhost | mysql.sys |
+-----------+------------------+
4 rows in set (0.00 sec)
如果host不是%可以通過以下方式來修改
mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> update user set host = '%' where user = 'root';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> flush privileges
-> ;
Query OK, 0 rows affected (0.00 sec)
上面的root可以換成其他的user名
4、檢查防火墻設(shè)置
- 本地提示缺少CMySQL庫(kù)切省,需要按照上文中的方式添加CMySQL庫(kù)到系統(tǒng)最岗,如果生成項(xiàng)目后再?gòu)南到y(tǒng)添加庫(kù)支持,則需要vapor update一下項(xiàng)目朝捆,重新生成一個(gè)xcodeproj文件般渡,這樣就可以編譯通過了。
總結(jié)
本篇介紹了怎么在ubuntu系統(tǒng)上安裝和配置MySQL芙盘, 如何配置遠(yuǎn)程訪問服務(wù)端的MySQL數(shù)據(jù)庫(kù)驯用,如果使用項(xiàng)目連接MySQL數(shù)據(jù)庫(kù)。
關(guān)于Vapor其他知識(shí)儒老,可以參考以下文章:
Vapor奇幻之旅(01開始)
Vapor奇幻之旅(02部署)
Vapor奇幻之旅(03上手)
Vapor奇幻之旅(04Routing)
Vapor奇幻之旅(05 Fluent)
Vapor奇幻之旅(06 PostgreSQL)
Vapor奇幻之旅(07 連接服務(wù)端PostgreSQL)
Vapor奇幻之旅(08 連接服務(wù)端MongoDB)
希望你對(duì)我的教程能夠喜歡晨汹,你們的贊是我持續(xù)的動(dòng)力,歡迎加入QQ群參與互動(dòng):431296189