20200520のMySQLに関する記事は11件です。

PHP&MySQLでデータの個数を数える方法(PDO)

MySQL接続をした後この処理をします。

$sql_form = "SELECT * FROM テーブル名";
$sql_form_result = $PDO -> query($sql_form);
$form_row_count = $sql_form_result->rowCount();

変数の名前は必要に応じて変えても大丈夫です。
$form_row_countという変数にデータ数が格納されています。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

PHPでMySQLデータを繰り返し処理(while文)

//データベース接続
$dsn = 'mysql:dbname=データベース名;host=localhost';
$user = 'root';
$password = 'パスワード';
try{
    $PDO = new PDO($dsn, $user, $password);
}catch (PDOException $e){
    print('Error:'.$e->getMessage());
    die();
}

//データの取得
$sql_shop = "SELECT * FROM shopdata";
$sql_shop_result = $PDO -> query($sql_shop);

//同じデータのgenreというフィールドがあった場合ひとつだけ取得する(必要に応じて削除可)
$sql_genre = "SELECT DISTINCT genre FROM shopdata";
$sql_genre_result = $PDO -> query($sql_genre);

//繰り返し処理(連想配列で取得)
while($genre_row = $sql_genre_result->fetch(PDO::FETCH_ASSOC)){
    $genre_rows[] = $genre_row;
  }
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

PHPでデータベースの重複を取得するには

<?php
$query = $dbh->query("SELECT COUNT(*) FROM formdata WHERE userid = '".$userid."' AND kind = '".$kind."'");
$count = $query->fetchColumn();
if ($count > 0){
?>
<p align="center">投稿が重複しています</p>
<?php
}else{
// データの追加
$sql = 'INSERT INTO formdata(id, kind, star, message, userid) VALUES("'.$id.'","'.$kind.'","'.$star.'","'.$message.'","'.$userid.'")';
$stmt = $dbh -> prepare($sql);
$stmt -> execute();
?>
<p align="center">投稿ありがとうございました。</p>

mysqli接続だとfetchColumやprepare関数が使えなくなるのでpdo接続してあります。

2行目は
formdataというテーブルの中に
kindというフィールドがphpの変数kindと同じかつ、useridというフィールドがphpの変数useridと同じデータが
何個あるかカウントしています。

4行目のif文で、カウントした個数が0よりも多かった場合に重複した時の処理を出力します。
(ここではhtmlのテキストを出力)

10行目では、データが重複しなかったので新たなデータをデータベースに追加します。
id, kind, star, message, useridは追加するデータのフィールド名

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

phpでmysqlのデータを取得して操作する方法

//データベース接続
$dsn = 'mysql:dbname=テーブル名;host=localhost';
$user = 'root';
$password = 'パスワード';
try{
    $PDO = new PDO($dsn, $user, $password);
}catch (PDOException $e){
    print('Error:'.$e->getMessage());
    die();
}

// データの追加
$sql = 'INSERT INTO formdata(id, kind, star, message, userid) VALUES("'.$id.'","'.$kind.'","'.$star.'","'.$message.'","'.$userid.'")';
$stmt = $dbh -> prepare($sql);
$stmt -> execute();

//データの編集(更新)
$sql = ('UPDATE formdata SET star = :star,message = :message WHERE id = :id');
$stmt = $PDO->prepare($sql);
$params = array(':star' => $star, ':message' => $message, ':id' => $form_id);
$stmt->execute($params);

//データの削除
$sql = ('DELETE FROM formdata where id = :id');
$stmt = $PDO->prepare($sql);
$params = array(':id' => $form_id);
$stmt->execute($params);

formdataにはテーブル名を代入します。
idはprimary keyにしてあります。
star,messageはテーブルのフィールド名です。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

phpでmysqlにpdo接続するには

//データベース接続
$dsn = 'mysql:dbname=データベース名;host=localhost';
$user = 'root';
$password = 'パスワード';
try{
    $PDO = new PDO($dsn, $user, $password);
}catch (PDOException $e){
    print('Error:'.$e->getMessage());
    die();
}

エラーの時はメッセージが表示されるようにしておきます

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MySQL/MariaDB SQL チートシート

MySQL/MariaDB のデータベースをコマンドラインから作成するときとかのよく使う CLI コマンドをまとめたものです。

完全に自分用です。

Create DB and user

CREATE DATABASE dev-c5db DEFAULT CHARACTER SET=utf8mb4;

GRANT ALL PRIVILEGES ON `dev-c5db`.* TO `dev-c5dbuser`@`127.0.0.1` IDENTIFIED BY 'password' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON `dev-c5db`.* TO `dev-c5dbuser`@`localhost` IDENTIFIED BY 'password' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON `dev-c5db`.* TO `dev-c5dbuser`@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON `dev-c5db`.* TO `dev-c5dbuser`@`Additional IP` 

FLUSH PRIVILEGES;

Clear database

mysqldump -h [mysql_address] -u [mysql_username] -p --add-drop-table --no-data [database_name] | grep ^DROP | mysql -u [mysql_username] -p  -h [mysql_address] [database_name]

mysqldump -h [mysql_address] -u [mysql_username] -p --add-drop-table --no-data [database_name] | grep ^DROP | mysql -u [mysql_username] -p [database_name]

mysqldump -u${user} -p${pass} -h ${host} --add-drop-table --no-data ${database} | grep ^DROP | mysql -u${user} -p${pass} -h ${host} ${database}
DROP DATABASE `dev-db`;
CREATE DATABASE `dev-db` DEFAULT CHARACTER SET=utf8mb4;
GRANT ALL ON `dev-db`.* to `dev-dbuser`@`127.0.0.1` WITH GRANT OPTION;
GRANT ALL ON `dev-db`.* to `dev-dbuser`@`localhost` WITH GRANT OPTION;
GRANT ALL ON `dev-db`.* to `dev-dbuser`@`XXX.XXX.XXX.XXX` WITH GRANT OPTION;
FLUSH PRIVILEGES;

concrete5

File Storage Location from 2 to 1

UPDATE `Files` SET fslID=REPLACE(fslID, 2,1);

Update user data

Batch change concrete5 User data

UPDATE Users SET uEmail=REPLACE(uEmail, "original", "example");
UPDATE Users SET uEmail=REPLACE(uEmail, "original", "example"); 
UPDATE Users SET uEmail=CONCAT(uName, '@example.com');

UPDATE Users SET uEmail=CONCAT(uName, '@example.com') WHERE uEmail NOT LIKE  "%@concrete5.co.jp";

UPDATE Users SET uName=uID WHERE uID NOT LIKE  "1";
UPDATE Users SET uEmail=CONCAT(uID, '@example.com') WHERE uEmail NOT LIKE  "%@concrete5.co.jp";

Replace URL

UPDATE atDefault SET value = REPLACE(value, 'http://example.com', 'http://example.net');
UPDATE btContentLocal SET content = REPLACE(content, 'http://example.com', 'http://example.net');

MySQL ユーザー権限

mysqlに切り替え

USE mysql

登録されているユーザを確認

SELECT user, host FROM user;

権限を表示

SHOW GRANTS for 'user'@'%';
SHOW GRANTS for 'user'@'127.0.0.1';
SHOW GRANTS for 'user'@'localhost';

MySQL システム

Upgrade MySQL Client

sudo yum remove mysql-community-client mysql-community-common mysql-community-devel mysql-community-libs mysql-community-libs-compat
sudo yum-config-manager --disable mysql57-community
sudo yum-config-manager --enable mysql80-community
sudo yum install mysql-community-client mysql-community-common mysql-community-devel mysql-community-libs mysql-community-libs-compat MySQL-python net-snmp php-snmp postfix

Copy MySQL from one to another

# Format
mysqldump -h [old HOST] -u [old USER] [old DB] | mysql -h [new HOST] -u [new USER] [new DB]
# Sample
mysqldump -h 127.0.0.1 -u root c5demo_802 | mysql -h 127.0.0.1 -u root c5demo_prb
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ElixirでMySQLを使う #1(Ecto/MyXQLセットアップ〜DB作成)

概要

ElixirDatabaseラッパーでありQueryジェネレータであるEctoMySQLに連携し、データ作成・読み出し・更新・削除(= CRUD)操作を行っていきます。
(複数回に分けて書きます。本記事ではEctoでのDB作成まで)

  • mix newでプロジェクト作成し、IExで動作確認をします。
  • EctoアダプタにはMyXQLを使用します。(記事執筆時点2020年5月20日における最新バージョン0.3.4

実行環境

バージョン 備考
macOS 10.14.6
Elixir 1.9.2 Erlang/OTP 22
MySQL 5.7.29 ローカル環境(localhost / rootユーザー / passwordなし)

前提

  • Elixirインストール済み
  • MySQLインストール済み&ローカルDBサーバー起動済み

参考

  • Ecto (Hexdocs)
    • こちらのGetting Startedドキュメントをお題としつつ進めていきます。
    • ドキュメント本家ではPostgreSQL使用ですが、当記事では趣向を変えてMySQLバージョンにアレンジして実装します。(ディレクトリ名やレコード等も一部変更)
  • MyXQL (Hexdocs)
  • Elixir School (ECTO)

プロジェクト作成とEctoセットアップ

プロジェクト作成

プロジェクト名をfriendsmysqlとして、セットアップしていきます。

terminal
  $ mix new friendsmysql --sup
  * creating README.md
  * creating .formatter.exs
  * creating .gitignore
  * creating mix.exs
  * creating lib
  * creating lib/friendsmysql.ex
  * creating lib/friendsmysql/application.ex
  * creating test
  * creating test/test_helper.exs
  * creating test/friendsmysql_test.exs

  Your Mix project was created successfully.
  You can use "mix" to compile it, test it, and more:

      cd friendsmysql
      mix test

  Run "mix help" for more commands.
terminal
  $ cd friendsmysql

依存パッケージを追加

mix.exs
  defp deps do
    [
      {:ecto_sql, "~> 3.4"},    -> add
      {:myxql, "~> 0.4.0"}      -> add
terminal
  $ mix deps.get
  Resolving Hex dependencies...
  Dependency resolution completed:
  New:
    connection 1.0.4
    db_connection 2.2.2
    decimal 1.8.1
    ecto 3.4.4
    ecto_sql 3.4.4
    myxql 0.4.0
    telemetry 0.4.1
  * Getting ecto_sql (Hex package)
  * Getting myxql (Hex package)
  * Getting db_connection (Hex package)
  * Getting decimal (Hex package)
  * Getting connection (Hex package)
  * Getting ecto (Hex package)
  * Getting telemetry (Hex package)

Ectoのリポジトリを作成

データベースとの接続と通信を行うために、リポジトリをセットアップします。

terminal
  $ mix ecto.gen.repo -r Friendsmysql.Repo
  ==> connection
  Compiling 1 file (.ex)
  Generated connection app
  ===> Compiling telemetry
  ==> decimal
  Compiling 1 file (.ex)
  Generated decimal app
  ==> db_connection
  Compiling 14 files (.ex)
  Generated db_connection app
  ==> ecto
  Compiling 55 files (.ex)
  Generated ecto app
  ==> myxql
  Compiling 15 files (.ex)
  Generated myxql app
  ==> ecto_sql
  Compiling 26 files (.ex)
  Generated ecto_sql app
  ==> friendsmysql
  * creating lib/friendsmysql
  * creating lib/friendsmysql/repo.ex
  * creating config/config.exs
  Don't forget to add your new repo to your supervision tree
  (typically in lib/friendsmysql/application.ex):

      {Friendsmysql.Repo, []}

  And to add it to the list of ecto repositories in your
  configuration files (so Ecto tasks work as expected):

      config :friendsmysql,
        ecto_repos: [Friendsmysql.Repo]

生成されたファイルのコードを、以下の通りアップデート&追記していきます。

config/config.exs
  config :friendsmysql, Friendsmysql.Repo,
    adapter: Ecto.Adapters.MyXQL,          --> add
    database: "friendsmysql_repo",
    username: "root",                      --> update
    password: "",                          --> update
    hostname: "localhost"                  --> update

  config :friendsmysql,                    --> add
    ecto_repos: [Friendsmysql.Repo]        --> add
lib/friends/application.ex
  def start(_type, _args) do
    children = [
      Friendsmysql.Repo,        --> add
lib/friendsmysql/repo.ex
  defmodule Friendsmysql.Repo do
    use Ecto.Repo,
      otp_app: :friendsmysql,
      adapter: Ecto.Adapters.MyXQL    --> add
  end

MySQLのデータベース作成

terminal
  $ mix ecto.create
  Compiling 3 files (.ex)
  Generated friendsmysql app
  The database for Friendsmysql.Repo has been created

ここまでで、データベースが作成されているかMySQL側で確認してみます。

terminal(MySQL)
  mysql> show databases;
  +--------------------+
  | Database           |
  +--------------------+
  |  .                 |
  |  .                 |
  | friendsmysql_repo  |
  |  .                 |
  |  .                 |

データベースfriendmysql_repo が作成できました!

終わり & 次回

ElixirでMySQLに接続し、Ectoを介してデータベースを作成しました。

次回は、マイグレーション〜スキーマ作成の実装から行っていきます。
(CRUDのCreateぐらいまでは書き進めたいなーと)

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ElixirでMySQLを使う(Ecto/MyXQL)#1 セットアップ〜DB作成

概要

ElixirDatabaseラッパーでありQueryジェネレータであるEctoMySQLに連携し、データ作成・読み出し・更新・削除(= CRUD)操作を行っていきます。
(複数回に分けて書きます。本記事ではEctoでのDB作成まで)

  • mix newでプロジェクト作成し、IExで動作確認をします。
  • EctoアダプタにはMyXQLを使用します。(記事執筆時点2020年5月20日における最新バージョン0.3.4

実行環境

バージョン 備考
macOS 10.14.6
Elixir 1.9.2 Erlang/OTP 22
MySQL 5.7.29 ローカル環境(localhost / rootユーザー / passwordなし)

前提

  • Elixirインストール済み
  • MySQLインストール済み&ローカルDBサーバー起動済み

参考

  • Ecto (Hexdocs)
    • こちらのGetting Startedドキュメントをお題としつつ進めていきます。
    • ドキュメント本家ではPostgreSQL使用ですが、当記事では趣向を変えてMySQLバージョンにアレンジして実装します。(ディレクトリ名やレコード等も一部変更)
  • MyXQL (Hexdocs)
  • Elixir School (ECTO)

プロジェクト作成とEctoセットアップ

プロジェクト作成

プロジェクト名をfriendsmysqlとして、セットアップしていきます。

terminal
  $ mix new friendsmysql --sup
  * creating README.md
  * creating .formatter.exs
  * creating .gitignore
  * creating mix.exs
  * creating lib
  * creating lib/friendsmysql.ex
  * creating lib/friendsmysql/application.ex
  * creating test
  * creating test/test_helper.exs
  * creating test/friendsmysql_test.exs

  Your Mix project was created successfully.
  You can use "mix" to compile it, test it, and more:

      cd friendsmysql
      mix test

  Run "mix help" for more commands.
terminal
  $ cd friendsmysql

依存パッケージを追加

mix.exs
  defp deps do
    [
      {:ecto_sql, "~> 3.4"},    -> add
      {:myxql, "~> 0.4.0"}      -> add
terminal
  $ mix deps.get
  Resolving Hex dependencies...
  Dependency resolution completed:
  New:
    connection 1.0.4
    db_connection 2.2.2
    decimal 1.8.1
    ecto 3.4.4
    ecto_sql 3.4.4
    myxql 0.4.0
    telemetry 0.4.1
  * Getting ecto_sql (Hex package)
  * Getting myxql (Hex package)
  * Getting db_connection (Hex package)
  * Getting decimal (Hex package)
  * Getting connection (Hex package)
  * Getting ecto (Hex package)
  * Getting telemetry (Hex package)

Ectoのリポジトリを作成

データベースとの接続と通信を行うために、リポジトリをセットアップします。

terminal
  $ mix ecto.gen.repo -r Friendsmysql.Repo
  ==> connection
  Compiling 1 file (.ex)
  Generated connection app
  ===> Compiling telemetry
  ==> decimal
  Compiling 1 file (.ex)
  Generated decimal app
  ==> db_connection
  Compiling 14 files (.ex)
  Generated db_connection app
  ==> ecto
  Compiling 55 files (.ex)
  Generated ecto app
  ==> myxql
  Compiling 15 files (.ex)
  Generated myxql app
  ==> ecto_sql
  Compiling 26 files (.ex)
  Generated ecto_sql app
  ==> friendsmysql
  * creating lib/friendsmysql
  * creating lib/friendsmysql/repo.ex
  * creating config/config.exs
  Don't forget to add your new repo to your supervision tree
  (typically in lib/friendsmysql/application.ex):

      {Friendsmysql.Repo, []}

  And to add it to the list of ecto repositories in your
  configuration files (so Ecto tasks work as expected):

      config :friendsmysql,
        ecto_repos: [Friendsmysql.Repo]

生成されたファイルのコードを、以下の通りアップデート&追記していきます。

config/config.exs
  config :friendsmysql, Friendsmysql.Repo,
    adapter: Ecto.Adapters.MyXQL,          --> add
    database: "friendsmysql_repo",
    username: "root",                      --> update
    password: "",                          --> update
    hostname: "localhost"                  --> update

  config :friendsmysql,                    --> add
    ecto_repos: [Friendsmysql.Repo]        --> add
lib/friends/application.ex
  def start(_type, _args) do
    children = [
      Friendsmysql.Repo,        --> add
lib/friendsmysql/repo.ex
  defmodule Friendsmysql.Repo do
    use Ecto.Repo,
      otp_app: :friendsmysql,
      adapter: Ecto.Adapters.MyXQL    --> add
  end

MySQLのデータベース作成

terminal
  $ mix ecto.create
  Compiling 3 files (.ex)
  Generated friendsmysql app
  The database for Friendsmysql.Repo has been created

ここまでで、データベースが作成されているかMySQL側で確認してみます。

terminal(MySQL)
  mysql> show databases;
  +--------------------+
  | Database           |
  +--------------------+
  |  .                 |
  |  .                 |
  | friendsmysql_repo  |
  |  .                 |
  |  .                 |

データベースfriendmysql_repo が作成できました!

終わり & 次回

ElixirでMySQLに接続し、Ectoを介してデータベースを作成しました。

次回は、マイグレーション〜スキーマ作成の実装から行っていきます。
(CRUDのCreateぐらいまでは書き進めたいなーと)

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ElixirでMySQLを使う #1(Ecto/MyXQLセットアップ〜データベース作成)

概要

ElixirDatabaseラッパーでありQueryジェネレータであるEctoMySQLに接続し、データ作成・読み出し・更新・削除(= CRUD)操作を行っていきます。

  • mix newでプロジェクト作成し、IExで動作確認をします。
  • EctoアダプタにはMyXQLを使用します。(記事執筆時点2020年5月20日における最新バージョン0.3.4

複数回に分けて書きます。
本記事では、Ectoを介したデータベース作成までを行います。

実行環境

バージョン 備考
macOS 10.14.6
Elixir 1.9.2 Erlang/OTP 22
MySQL 5.7.29 ローカル開発環境(localhost / rootユーザー / passwordなし)

前提

  • Elixirインストール済み
  • MySQLインストール済み&ローカルDBサーバー起動済み

参考

  • Ecto (Hexdocs)
    • こちらのGetting Startedドキュメントをお題としつつ進めていきます。
    • ドキュメント本家ではPostgreSQL使用のところを、当記事ではMySQLバージョンにアレンジして実装します。
    • ディレクトリ名やレコード、手順等も一部変更しています。
  • MyXQL (Hexdocs)
  • Elixir School (ECTO)

プロジェクト作成とEctoセットアップ

プロジェクト作成

プロジェクト名をfriendsmysqlとして、セットアップしていきます。

terminal
  $ mix new friendsmysql --sup
  * creating README.md
  * creating .formatter.exs
  * creating .gitignore
  * creating mix.exs
  * creating lib
  * creating lib/friendsmysql.ex
  * creating lib/friendsmysql/application.ex
  * creating test
  * creating test/test_helper.exs
  * creating test/friendsmysql_test.exs

  Your Mix project was created successfully.
  You can use "mix" to compile it, test it, and more:

      cd friendsmysql
      mix test

  Run "mix help" for more commands.
terminal
  $ cd friendsmysql

依存パッケージを追加

mix.exs
  defp deps do
    [
      {:ecto_sql, "~> 3.4"},  -> add
      {:myxql, "~> 0.4.0"}    -> add
terminal
  $ mix deps.get
  Resolving Hex dependencies...
  Dependency resolution completed:
  New:
    connection 1.0.4
    db_connection 2.2.2
    decimal 1.8.1
    ecto 3.4.4
    ecto_sql 3.4.4
    myxql 0.4.0
    telemetry 0.4.1
  * Getting ecto_sql (Hex package)
  * Getting myxql (Hex package)
  * Getting db_connection (Hex package)
  * Getting decimal (Hex package)
  * Getting connection (Hex package)
  * Getting ecto (Hex package)
  * Getting telemetry (Hex package)

Ectoのリポジトリを作成

データベースの接続と通信を行うために、リポジトリをセットアップします。

terminal
  $ mix ecto.gen.repo -r Friendsmysql.Repo
  ==> connection
  Compiling 1 file (.ex)
  Generated connection app
  ===> Compiling telemetry
  ==> decimal
  Compiling 1 file (.ex)
  Generated decimal app
  ==> db_connection
  Compiling 14 files (.ex)
  Generated db_connection app
  ==> ecto
  Compiling 55 files (.ex)
  Generated ecto app
  ==> myxql
  Compiling 15 files (.ex)
  Generated myxql app
  ==> ecto_sql
  Compiling 26 files (.ex)
  Generated ecto_sql app
  ==> friendsmysql
  * creating lib/friendsmysql
  * creating lib/friendsmysql/repo.ex
  * creating config/config.exs
  Don't forget to add your new repo to your supervision tree
  (typically in lib/friendsmysql/application.ex):

      {Friendsmysql.Repo, []}

  And to add it to the list of ecto repositories in your
  configuration files (so Ecto tasks work as expected):

      config :friendsmysql,
        ecto_repos: [Friendsmysql.Repo]

生成されたファイルのコードを、以下の通りアップデート&追記していきます。

config/config.exs
  config :friendsmysql, Friendsmysql.Repo,
    adapter: Ecto.Adapters.MyXQL,   --> add
    database: "friendsmysql_repo",
    username: "root",               --> update
    password: "",                   --> update
    hostname: "localhost"           --> update

  config :friendsmysql,              --> add
    ecto_repos: [Friendsmysql.Repo]  --> add
lib/friends/application.ex
  def start(_type, _args) do
    children = [
      Friendsmysql.Repo,  --> add
lib/friendsmysql/repo.ex
  defmodule Friendsmysql.Repo do
    use Ecto.Repo,
      otp_app: :friendsmysql,
      adapter: Ecto.Adapters.MyXQL  --> add
  end

MySQLのデータベース作成

terminal
  $ mix ecto.create
  Compiling 3 files (.ex)
  Generated friendsmysql app
  The database for Friendsmysql.Repo has been created

ここまでで、データベースが作成されているかMySQL側で確認してみます。

terminal(MySQL)
  mysql> show databases;
  +--------------------+
  | Database           |
  +--------------------+
  |  .                 |
  |  .                 |
  | friendsmysql_repo  |
  |  .                 |
  |  .                 |

データベースfriendmysql_repo が作成できました!

終わり & 次回

ElixirでMySQLに接続し、Ectoを介してデータベースを作成しました。

次回は、マイグレーション〜スキーマ作成の実装から行っていきます。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

DockerでMySQLを簡易的に立ててデータインポート

環境

  • Windows 10
  • MySQL Workbench 8.0
  • Docker Toolbox
    • MySQL8.0.16

工程

  • docker に MySQL を入れる
  • MySQL Workbench で接続できるようにする
  • SQLをインポートする

Docker machine の起動

Docker Quickstart Terminal のアプリケーションを起動する

MySQL のイメージを取得

$ docker pull mysql:8.0.16

MySQLコンテナを作成して起動

# docker ps -a で全てのコンテナ一覧
# docker ps で起動しているコンテナ一覧
# docker stop [CONTAINER ID] でコンテナ停止
# docker rm [CONTAINER ID] でコンテナ削除

$ docker run -it --name temp-mysql -e BIND-ADDRESS=0.0.0.0 -e MYSQL_ROOT_PASSWORD=mysql -p 3306:3306 -d mysql:8.0.16

# 一度作成したら docker start temp-mysql で起動できる

MySQLコンテナに接続

$ docker exec -it temp-mysql bash

MySQLに接続

$ mysql -u root -p -h 127.0.0.1

※終わったら MySQL を exit、コンテナも exit

外部IPを確認

$ docker-machine ls
NAME                ACTIVE   DRIVER       STATE     URL                         SWARM   DOCKER     ERRORS
default             *        virtualbox   Running   tcp://192.168.99.100:2376           v19.03.5
local-by-flywheel   -        virtualbox   Stopped                                       Unknown

MySQL Workbench から MySQL に接続

※MySQL Workbench は新しいバージョンをインストールしておくこと

接続情報

HOST ACCOUNT PASS PORT
192.168.99.100 root mysql 3306

SQLをインポートするデータベースを作成

CREATE DATABASE `{database_name}`;

SQLをインポート

  • MySQL Workbench を起動して MySQL に接続する
  • Navigator(左メニュー) のタブを Administration から Schemas に切り替える
  • 作成したデータベースを選択
  • 上メニューの ServerData Import を選択
    • Import from Self-Contained File のラジオボタンを選択
    • インポートしたいファイルを選択
    • Default Traget Schema でインポート先の Shema を選択
    • Start Import ボタンをクリック
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

dbdeployerを使ってみた

dbdeployerとは

ざっくりいうとMySQL Sandboxみたいなやつです。
気軽にDBサーバーを立てることが出来ます。

ちょうどschema管理周りの実験に使おうと
MySQL Sandboxのセッティングをしようとした時に発見しました。

ちなみにMySQL SandboxはPerl製のツールだったんですが、
dbdeployerはGoで出来てるみたいです。

dbdeployerでのセットアップ

今回は自分のローカルMacにインストールするので、
instalationの内容を少し書き換えて

VERSION=1.45.0
OS=osx
origin=https://github.com/datacharmer/dbdeployer/releases/download/v$VERSION
wget $origin/dbdeployer-$VERSION.$OS.tar.gz
tar -xzf dbdeployer-$VERSION.$OS.tar.gz
chmod +x dbdeployer-$VERSION.$OS
sudo mv dbdeployer-$VERSION.$OS /usr/local/bin/dbdeployer

これでコマンドは多々けるようになった。
次にtarball (tarで固めたファイルを指すらしい)を落としてくる作業が必要

まずはdry-run

$ dbdeployer downloads get-by-version 5.7 --newest --dry-run
Would download:

Name:          mysql-5.7.29-macos10.14-x86_64.tar.gz
Short version: 5.7
Version:       5.7.29
Flavor:        mysql
OS:            Darwin
URL:           https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.29-macos10.14-x86_64.tar.gz
Checksum:      SHA512:bc275458b4185d0290b6faa7f50e3cb250ec4eef57607b51d41c72ef800eb9c1cd4eb49adc0a924a7c64acc742930f5b3d2838b0b899770a6645a4eab7a10f50
Size:          361 MB
Notes:         added with version 1.44.0

で、実行

$ dbdeployer downloads get-by-version 5.7 --newest
Downloading mysql-5.7.29-macos10.14-x86_64.tar.gz
.........105 MB.........210 MB.........315 MB....  361 MB
File /Users/hiraoka.yosuke/mysql-5.7.29-macos10.14-x86_64.tar.gz downloaded
Checksum matches

コマンド実行と同じディレクトリにファイルが設置される。
これでtarballは手に入れられた。

次にtarballをunpackする必要があるらしい。
ちなみにopt/mysqlという場所にunpackされたものが置かれるのでディレクトリは作っておく。

$ mkdir -p $HOME/opt/mysql
$ dbdeployer unpack mysql-5.7.29-macos10.14-x86_64.tar.gz
Unpacking tarball mysql-5.7.29-macos10.14-x86_64.tar.gz to $HOME/opt/mysql/5.7.29
.........100.........200.........300.......376
Renaming directory /Users/hiraoka.yosuke/opt/mysql/mysql-5.7.29-macos10.14-x86_64 to /Users/hiraoka.yosuke/opt/mysql/5.7.29

これで準備は出来たのでdeployしてみる

$ dbdeployer deploy single 5.7.29
Creating directory /Users/hiraoka.yosuke/sandboxes
Database installed in $HOME/sandboxes/msb_5_7_29
run 'dbdeployer usage single' for basic instructions'
... sandbox server started

確認してみると

$ dbdeployer sandboxes
 msb_5_7_29               :   single   5.7.29   [5729 ]

ということで行けたっぽい。

ちなみにDBサーバーの中に入ろうと思うと、
sandboxesディレクトリの中からuseというスクリプトを叩けばいける。

cd ~/sandboxes/msb_5_7_29
./use

でいけます。
構築自体は出来たっぽいので一旦はここまで。
databaseを作ったりtableを作ったりいじって遊ぶのは次回ということで!

参考

github
次世代MySQL Sandbox! dbdeployerの使用方法について
【備忘録】dbdeployerの設定

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む