iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 26
1
Software Development

Go繁不及備載系列 第 26

# Day26 Golang MySQL安裝 資料庫的幻想與介紹

  • 分享至 

  • xImage
  •  

Day26 Golang MySQL安裝 資料庫的幻想與介紹

想當年,還沒學資料庫之前,對未知的資料庫一詞這充滿了憧憬與想像,
覺得這就是塞了一堆資料的地方,但不曉得原理是怎麼塞的,
可能是用了外星科技或各種黑魔法吧。
直到上了資料庫的課,老師打破了我對資料庫的幻想。

順帶一提,過了一個學期之後,那位老師開始教作業系統,
再度破滅了原先我對作業系統異想天開的構想。
但老師實在是教的很棒,真是愛恨交加。

資料庫(Database)分成非常多種:

  • 星狀資料庫
  • 關聯式資料庫
  • 階層式資料庫
  • 物件導向資料庫
  • ...

但最常用到的是關聯式資料庫(Relational Database)簡稱RDB,以及非關聯式資料庫(NoSQL)(NOSQL不是沒有SQL,也不是對SQL說NO,而指的是Not Only SQL

DB、SQL、RDBMS 的關係

DB 是資料庫,是一群數據的集合體,數據所在的位置,不管存了什麼都叫資料庫。
(DBA 是資料庫管理員,負責資料庫的維護、備份、安全管理的人。)

SQL 是結構化查詢語言,是一種程式語言,語法關鍵字有SELECTINSERTWHEREDROP 等等,用來操作關聯式資料庫。

RDBMS 是關聯式資料庫管理系統,是實作出來可以支援SQL語法的系統、服務,如MySQLSQLiteMariaDBOracle DatabaseAccess 等等。

NoSQL 是相對於RDBMS的 非關聯式資料庫管理系統,也有非常眾多的系統,如RedismemcachedMongoDB 等等,其中有支援鍵值(Key–value)的、也有支援JSON格式的。


關聯式資料庫基本上就是Microsoft Office 的 Excel,都是二維的表格,都有行列欄位。
只不過用法更加的靈活,可以設置 唯一識別 主鍵(Primary Key), 不可重複 Unique 等等條件。

安裝MySQL

MySQL

MySQL 是一個系統、一項服務。

要跑起服務前,當然需要在電腦上下載與安裝。

安裝方法多到數不清。
MySQL目前出到8.0版本了。
以下會統一把最高權限帳戶root的密碼改成root

Windows

除了可以下載 MySQL官網 來安裝,

也可以下載簡單好用的 XAMPP 來啟動MySQL服務,

XAMPP (Windows)

XAMPP

XAMPP的MySQL預設密碼為空,
點擊Shell,將root帳號的密碼為root

$ mysqladmin.exe -u root password root  

這裡也要做更改
my.ini
password

如果日後會用到phpmyadmin介面的話,這邊也要改做修改
phpmyadmin
phpmyadmin password

接著重啟MySQL服務。

MacOS

Homebrew來安裝執行

$ brew install mysql@8.0  
$ brew services start mysql@8.0  

更改root密碼

$ /usr/local/bin/mysqladmin -u root password root

登入MySQL

$ mysql -u root -p

(要結束MySQL的話)

$ brew services stop mysql@8.0  

Docker

也可以用跨平台的Docker Container方式:
把container命名為mysql_test
將密碼預設為root

$ docker run --name=mysql_test -d -p 3306:3306 --env MYSQL_ROOT_PASSWORD=root mysql:8.0

登入MySQL

$ docker exec -it mysql_test mysql -uroot -p 

(要結束MySQL的話)

$ docker container rm  -f mysql_test

MySQL服務預設會開在Server端的3306 Port
而Server端儲存的root密碼是root,
Client端連進去的密碼就要是root,否則無法登入。
安裝完成、也確認過可以用帳號密碼root/root登入後,便可以開始來寫程式。

在這邊Server端Client端指的都是自己目前的電腦。

接下來會以程式的方式來模擬Client端,Client端能對Server端進行登入、操作資料等等。

但在用Golang 模擬 Client端的行為之前,要先安裝驅動Driver,否則不能支援地

[Go-MySQL-Driver]https://github.com/go-sql-driver/mysql

$ go get -u github.com/go-sql-driver/mysql

連線MySQL的第一支程式。

以下運行成功的話不會出現任何東西。

package main

import (
	"database/sql"
	_ "github.com/go-sql-driver/mysql" //為什麼要用底線_來占著位子?
	"log"
)

func main() {
	dbConnect, err := sql.Open(
		"mysql",	// 因為只有這裡才用到這個`引數`,並沒有直接使用到了mysql.XXX 相關的函式或物件,會被認為沒有用到mysql這個依賴而 被go編譯器省略import 
		"root:root@tcp(127.0.0.1:3306)/",
	)
	
	if err != nil {
		log.Fatalln(err)
	}

	err = dbConnect.Ping() //Ping() 這裡才開始建立連線。上面 sql.Open 只建立物件、容器,並未進行連線,無法連線並不造成err。
	if err != nil {
		log.Fatalln(err)
	}
}

Open() may just validate its arguments without creating a connection to the database.
To verify that the data source name is valid, call Ping().

沒開啟服務、沒連接到MySQL的話會出現:dial tcp 127.0.0.1:3306: connectex: No connection could be made because the target machine actively refused it.

密碼錯誤會出現:Error 1045: Access denied for user 'root'@'localhost' (using password: YES)

沒有import Driver:sql: unknown driver "mysql" (forgotten import?)


上一篇
# Day25 Golang 爬蟲框架 colly 模擬使用者登入
下一篇
# Day27 Golang MySQL 我的資料庫
系列文
Go繁不及備載35
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言