- 投稿日:2020-05-20T23:16:26+09:00
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という変数にデータ数が格納されています。
- 投稿日:2020-05-20T23:12:33+09:00
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; }
- 投稿日:2020-05-20T23:03:56+09:00
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は追加するデータのフィールド名
- 投稿日:2020-05-20T22:49:49+09:00
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はテーブルのフィールド名です。
- 投稿日:2020-05-20T22:43:59+09:00
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(); }エラーの時はメッセージが表示されるようにしておきます
- 投稿日:2020-05-20T21:35:40+09:00
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 postfixCopy 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
- 投稿日:2020-05-20T20:51:24+09:00
ElixirでMySQLを使う #1(Ecto/MyXQLセットアップ〜DB作成)
概要
Elixir
のDatabaseラッパーでありQueryジェネレータであるEcto
でMySQL
に連携し、データ作成・読み出し・更新・削除(=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.exsdefp deps do [ {:ecto_sql, "~> 3.4"}, -> add {:myxql, "~> 0.4.0"} -> addterminal$ 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.exsconfig :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] --> addlib/friends/application.exdef start(_type, _args) do children = [ Friendsmysql.Repo, --> addlib/friendsmysql/repo.exdefmodule Friendsmysql.Repo do use Ecto.Repo, otp_app: :friendsmysql, adapter: Ecto.Adapters.MyXQL --> add endMySQLのデータベース作成
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ぐらいまでは書き進めたいなーと)
- 投稿日:2020-05-20T20:51:24+09:00
ElixirでMySQLを使う(Ecto/MyXQL)#1 セットアップ〜DB作成
概要
Elixir
のDatabaseラッパーでありQueryジェネレータであるEcto
でMySQL
に連携し、データ作成・読み出し・更新・削除(=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.exsdefp deps do [ {:ecto_sql, "~> 3.4"}, -> add {:myxql, "~> 0.4.0"} -> addterminal$ 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.exsconfig :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] --> addlib/friends/application.exdef start(_type, _args) do children = [ Friendsmysql.Repo, --> addlib/friendsmysql/repo.exdefmodule Friendsmysql.Repo do use Ecto.Repo, otp_app: :friendsmysql, adapter: Ecto.Adapters.MyXQL --> add endMySQLのデータベース作成
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ぐらいまでは書き進めたいなーと)
- 投稿日:2020-05-20T20:51:24+09:00
ElixirでMySQLを使う #1(Ecto/MyXQLセットアップ〜データベース作成)
概要
Elixir
のDatabaseラッパーでありQueryジェネレータであるEcto
でMySQL
に接続し、データ作成・読み出し・更新・削除(=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.exsdefp deps do [ {:ecto_sql, "~> 3.4"}, -> add {:myxql, "~> 0.4.0"} -> addterminal$ 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.exsconfig :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] --> addlib/friends/application.exdef start(_type, _args) do children = [ Friendsmysql.Repo, --> addlib/friendsmysql/repo.exdefmodule Friendsmysql.Repo do use Ecto.Repo, otp_app: :friendsmysql, adapter: Ecto.Adapters.MyXQL --> add endMySQLのデータベース作成
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を介してデータベースを作成しました。
次回は、マイグレーション〜スキーマ作成の実装から行っていきます。
- 投稿日:2020-05-20T19:58:05+09:00
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 bashMySQLに接続
$ 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 UnknownMySQL 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
に切り替える- 作成したデータベースを選択
- 上メニューの
Server
でData Import
を選択
Import from Self-Contained File
のラジオボタンを選択- インポートしたいファイルを選択
Default Traget Schema
でインポート先のShema
を選択Start Import
ボタンをクリック
- 投稿日:2020-05-20T11:07:40+09:00
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の設定