Vapor奇幻之旅(09 連接MySQL)

這一篇文章主要介紹如何在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接口:


image.png

但是本地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了


image.png

這時(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í)行插入操作:

image.png

執(zhí)行查詢操作:


image.png

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末贷盲,一起剝皮案震驚了整個(gè)濱河市淘这,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌巩剖,老刑警劉巖铝穷,帶你破解...
    沈念sama閱讀 210,978評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異佳魔,居然都是意外死亡曙聂,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門鞠鲜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來宁脊,“玉大人,你說我怎么就攤上這事贤姆∮馨” “怎么了?”我有些...
    開封第一講書人閱讀 156,623評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵霞捡,是天一觀的道長(zhǎng)坐漏。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么赊琳? 我笑而不...
    開封第一講書人閱讀 56,324評(píng)論 1 282
  • 正文 為了忘掉前任街夭,我火速辦了婚禮,結(jié)果婚禮上躏筏,老公的妹妹穿的比我還像新娘板丽。我一直安慰自己,他們只是感情好趁尼,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,390評(píng)論 5 384
  • 文/花漫 我一把揭開白布埃碱。 她就那樣靜靜地躺著,像睡著了一般弱卡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上住册,一...
    開封第一講書人閱讀 49,741評(píng)論 1 289
  • 那天婶博,我揣著相機(jī)與錄音,去河邊找鬼荧飞。 笑死凡人,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的叹阔。 我是一名探鬼主播挠轴,決...
    沈念sama閱讀 38,892評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼耳幢!你這毒婦竟也來了岸晦?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,655評(píng)論 0 266
  • 序言:老撾萬榮一對(duì)情侶失蹤睛藻,失蹤者是張志新(化名)和其女友劉穎启上,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體店印,經(jīng)...
    沈念sama閱讀 44,104評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡冈在,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了按摘。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片包券。...
    茶點(diǎn)故事閱讀 38,569評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖炫贤,靈堂內(nèi)的尸體忽然破棺而出溅固,到底是詐尸還是另有隱情,我是刑警寧澤兰珍,帶...
    沈念sama閱讀 34,254評(píng)論 4 328
  • 正文 年R本政府宣布发魄,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏励幼。R本人自食惡果不足惜汰寓,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,834評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望苹粟。 院中可真熱鬧有滑,春花似錦、人聲如沸嵌削。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)苛秕。三九已至肌访,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間艇劫,已是汗流浹背吼驶。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評(píng)論 1 264
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留店煞,地道東北人蟹演。 一個(gè)月前我還...
    沈念sama閱讀 46,260評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像顷蟀,于是被迫代替她去往敵國(guó)和親酒请。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,446評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容

  • 在配置ubuntu16.4服務(wù)器上的postgresql數(shù)據(jù)庫(kù)時(shí)遇到了很多問題鸣个,網(wǎng)上查了很多資料羞反,都沒有太深的理解...
    leacode閱讀 970評(píng)論 0 0
  • 在Vapor奇幻之旅(02部署)一篇中,我介紹了如何在ubuntu上部署并運(yùn)行vapor項(xiàng)目囤萤,這篇文章我來講講怎么...
    leacode閱讀 1,226評(píng)論 0 0
  • 本篇介紹如何用vapor連接另一種數(shù)據(jù)庫(kù)Mongodb 安裝MongoDB 首先付上官網(wǎng)的安裝教程:安裝mongo...
    leacode閱讀 908評(píng)論 0 1
  • 用Vapor連接數(shù)據(jù)庫(kù)是一件令人興奮的事苟弛,本篇就來介紹如何使用Vapor來連接PostgreSQL數(shù)據(jù)庫(kù),將數(shù)據(jù)持...
    leacode閱讀 921評(píng)論 0 0
  • 【壹】 我是一個(gè)流浪的說書人阁将,為了生計(jì)也算上那么幾卦膏秫。這兩者在我眼里并無不同,都是在講述別人的故事做盅,僅此而已我喜歡...
    岳如懸閱讀 596評(píng)論 3 1