1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CentOS上でGo言語-MySQLを使う

Posted at

DB初心者ですが、Go言語でMySQLからデータを取り出す必要が出てきたので検証してみました。
SQLもろくに書いたことないので、インストール~データ作成までやってみました。
記事初投稿なので、分かりづらいところがありましたら教えてくださいませ。

やりたいこと

CentOSにMySQLをインストールして、テーブル作成、データ挿入をする。
作ったデータをGo言語を使って出力する。
※CentOSおよびGo開発環境は構築済みとする。

検証環境

OS: CentOS7
言語: Go 1.11.2 linux/amd64
DB: MySQL Ver 14.14 Distrib 5.7.25, for Linux (x86_64) ※最新

MySQL準備

インストール

  • まずはyumのアップデート
$ sudo yum update
  • MySQLのインストール
$ sudo yum -y install mysql mysql-server
> mysqlはmysqlのクライアント
> mysql-serverはmysqlのデーモン。サービス名はmysqld

起動

  • サービスの起動
$ sudo service mysqld start

※次のエラーが出力される場合
> Failed to start mysqld.service: Unit not found.
MySQLの公式リポジトリを使用できるようにして、ライブラリ群をインストールする

$ sudo yum localinstall http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm
$ sudo yum -y install mysql mysql-devel mysql-server mysql-utilities
$ sudo service mysqld start
  • サービスの起動確認
$ service mysqld status
Redirecting to /bin/systemctl status mysqld.service
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: active (running) since Mon 2019-01-28 01:46:39 UTC; 3min 47s ago
   ..

▶activeになっていることを確認

  • OSに自動起動させるようにしておく
$ sudo chkconfig mysqld on

初期設定

  • rootの初期パスワードチェック
$ cat /var/log/mysqld.log | grep 'temporary password'
2019-01-28T01:46:33.651124Z 1 [Note] A temporary password is generated for root@localhost: ###########

########### 部分に初期パスワードが表示される

  • 初期設定を実行
$ mysql_secure_installation

▶ パスワード変更を実行する

DB作成

  • rootでログイン
$ mysql -uroot -p
  • ユーザー作成
mysql> CREATE USER ユーザー名@localhost IDENTIFIED BY 'パスワード';
  • データベースの作成
mysql> CREATE DATABASE testdb;
  • 権限付与
mysql> GRANT ALL ON testdb.* TO ユーザー名@localhost;
  • ユーザー切り替え
mysql> quit
$ mysql -u ユーザー名 -p
  • データベース接続
mysql> use testdb;

TABLEの作成

  • テーブル作成
mysql> CREATE TABLE users(NAME varchar(20), AGE int, ID int AUTO_INCREMENT NOT NULL PRIMARY KEY);

データ作成

  • データ挿入
mysql> INSERT INTO testdb.users(NAME, AGE) value('Yamada Taro', 25);
mysql> INSERT INTO testdb.users(NAME, AGE) value('Suzuki Toshiyuki', 31);
  • テーブル確認
mysql> select * from users;
+------------------+------+----+
| NAME             | AGE  | ID |
+------------------+------+----+
| Yamada Taro      |   25 |  1 |
| Suzuki Toshiyuki |   31 |  2 |
+------------------+------+----+
2 rows in set (0.00 sec)

GoでDBへ接続

パッケージ準備

$ go get -u github.com/go-sql-driver/mysql
  • mysql.goを作成
$ mkdir $GOPATH/src/test-mysql && cd $GOPATH/src/test-mysql
$ touch mysql.go
mysql.go
    package main
    import (
        "database/sql"
        "fmt"
        
        _ "github.com/go-sql-driver/mysql"
    )
    // User ユーザー型
    type User struct {
        ID   int64
        Name string
        Age  int64
    }
    func main() {
        // db接続
        db, err := sql.Open("mysql", "ユーザー名:パスワード@/testdb")
        if err != nil {
            panic(err.Error())
        }
        defer db.Close()
        
        // クエリ実行
        rows, err := db.Query("SELECT id,name,age FROM users")
        defer rows.Close()
        var users []User
        
        // データを保存
        for rows.Next() {
            var user User
            err := rows.Scan(&(user.ID), &(user.Name), &(user.Age))
            if err != nil {
                panic(err.Error())
            }
            users = append(users, user)
        }
        
        fmt.Println(users)
    }
  • 実行
$ go run mysql.go
[{1 Yamada Taro 25} {2 Suzuki Toshiyuki 31}]

参考サイト

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?