Go連線MySQL的方式問題

2021-06-28 14:34:56 字數 1731 閱讀 1886

在系統安裝好mysql,go以及mysql-go的驅動之後,需要做的就是連線mysql,給個簡短的連線資料庫**如下:

panic: runtime error: invalid memory address or nil pointer dereference
經過查閱多方資料,找到的答案是指定具體連線mysql的方式有三種不同**:①

db, err := sql.open("mysql", "user:password@unix(/tmp/mysql.sock)/test") ②

db, err := sql.open("mysql", "user:password@tcp(localhost:3306)/test")   //指定ip和埠 ③

db, err := sql.open("mysql", "user:password@/test")  //預設方式

那麼,這兩種方式的區別在哪呢?首先可以看下面兩幅:

每一次外部以某種身份連線到mysql的時候,mysql會新增乙個connection id,connection顯示的是該程式連線到mysql的連線方式。

中給出了兩個不同使用者的狀態,注意兩個使用者的連線方式,乙個是via tcp/ip,另乙個是via unix socket。還發現乙個微小的問題,就是埠號指定問題,埠號的範圍是0-65535,因此對於大於65535的埠號會出現系統識別不了的問題。這只是對像我一樣的初學者的提醒。

檢視使用者發現乙個問題就是,系統為什麼會有那麼多的root使用者,其實對於mysql而言,host+username才是乙個基本單位,所以可以認為root在不同host名下是不同的使用者

1、::1應該是表示本地的v6位址

2、沒有使用者名稱的話,應該是匿名使用者了

3、對於mysql來講,127.0.0.1和localhost應該不一樣的;

在採用預設連線方式,即③的時候,panic: error 1045: access denied for user 'root'@'localhost' (using password: yes)

證明系統預設選擇的root是沒有密碼的,如果需要用root@localhost需要額外指定,如:db, err := sql.open("mysql", "user:password@tcp(localhost:3306)/test") 

綜上所述,問題大致源於使用者管理問題,所以理清這些問題,自然就可以解決出現的問題。

go中mysql連線 Go 連線MySQL

go操作mysql 連線go語言中的database sql包提供了保證sql或類sql資料庫的泛用介面,並不提供具體的資料庫驅動。使用database sql包時必須注入 至少 乙個資料庫驅動。我們常用的資料庫基本上都有完整的第三方實現。例如 mysql驅動 使用mysql驅動 func open...

go連線mysql集群 Go連線MYSQL

go原生提供了連線資料庫操作的支援,在用 golang進行開發的時候,如果需要在和資料庫互動,則可以使用database sql包。這是乙個對關係型資料庫的通用抽象,它提供了標準的 輕量的 面向行的介面。在go中訪問資料庫需要用到sql.db介面 它可以建立語句 statement 和事務 tran...

mysql 連線 MySQL的連線方式

連線mysql操作是連線程序和mysql資料庫例項進行通訊。從開發的角度來說,本質上是程序通訊。常用的程序通訊方式有管道 命名管道 命名字 tcp ip套接字 unix網域名稱套接字。mysql提供的連線方式從本質上看都是上述提及的程序通訊方式。tcp ip tcp ip套接字方式是mysql在任何...