Mac に MySQL をインストールする

下記を参考にした。

qiita: Macでmysqlを扱う方法

苦戦したので、メモとして残す。

MySQLオープンソースのデータベースです。

wikipedia: MySQL

Mac の場合は、brewコマンドでインスールできる。

Homrbrew mysql

インストールする。

% brew install mysql

インスールが終わったら、バージョンを確認する。

% mysql --version

mysql Ver 8.0.31 for macos10.15 on x86_64 (Homebrew)

関連情報を表示する。

% brew info mysql

mysql: stable 8.0.31 (bottled) To connect run: mysql -u root To restart mysql after an upgrade: brew services restart mysql

サーバーを起動する。

brew services start mysql

Successfully started mysql (label: homebrew.mxcl.mysql)

接続する。

mysql -u root

エラーになる。

Can't connect to local MySQL server through socket '/tmp/mysql.sock'

下記の記事がヒットしたが、これではなかった。

qiita: mysqlが起動できない

ログを確認する。

MySQLの関連ファイルは下記にある。

/usr/local/var/mysql/

下記がエラーログ

user-MacBook-Air.local.err

下記のエラーがあった。

[ERROR] [MY-012526] [InnoDB] Upgrade is not supported after a crash or shutdown with innodb_fast_shutdown = 2. This redo log was created with MySQL 5.7.14, and it appears logically non empty. Please follow the instructions at http://dev.mysql.com/doc/refman/8.0/en/upgrading.html

指示されたドキュメントを読む

Upgrading MySQL

要約すると MySQL 8.0 はそれ以前と互換性がないので、 アップグレードする前に問題を解消しておけ。

どうやら MySQL 5.7.14 がインストールされていたようで、 今回のインストール作業で MySQL 8.0 にアップグレードされたようです。

今回は、過去の作業はないことにした クリーンインストールでいいので、 関連ファイルを全て削除することにする。

brew uninstall mysql では、関連ファイルは削除されないので。手入力で強制削除する。

% sudo rm -fr /usr/local/var/mysql/*

その後。再度インストールする。

% brew reinstall mysql

サーバーを起動する。

brew services start mysql

接続する。

mysql -u root

今度はうまくいった。

Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 10 Server version: 8.0.31 Homebrew

バージョンを表示する。

mysql> SELECT VERSION();

+-----------+
| VERSION() |
+-----------+
| 8.0.31 |
+-----------+

終了する。

mysql> exit;

qiita: コマンドラインからMySQL操作

コマンドラインから接続できたので、簡単なプログラムを試す。

下記を参考にした。

CでMySQLにアクセスする

テスト用データを作成する。

mysql -uroot
create database db_test;
use db_test
create table tb_test(id int,name varchar(256));
insert into tb_test(id,name) values(1,"aaa");
insert into tb_test(id,name) values(2,"bbb");
insert into tb_test(id,name) values(3,"ccc");
exit

プログラムを作成する。

mysql.c

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <mysql/mysql.h>
int main(void){
  MYSQL *conn     = NULL;
  MYSQL_RES *resp = NULL;
  MYSQL_ROW row;
  char sql_str[255];
  char *sql_serv  = "localhost";
  char *user      = "root";
  char *passwd    = "";
  char *db_name   = "db_test";

  memset( &sql_str[0] , 0x00 , sizeof(sql_str) );

  // mysql接続
  conn = mysql_init(NULL);
  if( !mysql_real_connect(conn,sql_serv,user,passwd,db_name,0,NULL,0) ){
    // error
    exit(-1);
  }

  // クエリ実行
  snprintf( &sql_str[0] , sizeof(sql_str)-1 , "select * from tb_test" );
  if( mysql_query( conn , &sql_str[0] ) ){
    // error
    mysql_close(conn);
    exit(-1);
  }

  // レスポンス
  resp = mysql_use_result(conn);
  while((row = mysql_fetch_row(resp)) != NULL ){
    printf( "%d : %s\n" , atoi(row[0]) , row[1] );
  }
  // 後片づけ

  mysql_free_result(resp);
  mysql_close(conn);
  return 0;
}

コンパイルする。

brew コマンドでインストールすると、pkg-configもセットアップされる。

% pkg-config --cflags --libs mysqlclient

% gcc -Wall mysql.c pkg-config --cflags --libs mysqlclient -o mysql

実行する。

% ./mysql

1 : aaa
2 : bbb
3 : ccc

サンプルコードを Github に公開した。

https://github.com/ohwada/MAC_cpp_Samples/tree/master/mysql