20210220のMySQLに関する記事は6件です。

低コストでSQLを勉強する方法【Docker+GUI Toool】

macOS前提の記述ですが、他OSでもある程度対応できるはずです。

Step1 Dockerを入れる

Dockerを入れる。

Step1-2 Dockerの操作を補助するツールを入れる(任意)

Kitematicを入れる。
想定読者層がDockerやSQLに慣れていない人であり、コンテナの停止や再起動といった事がGUIでできるため推奨。

Step2 genschsa/mysql-employeesをpullする

image.png
Docker Hubkからgenschsa/mysql-employeesを入れる。

docker pull genschsa/mysql-employees

でイメージを持ってきて

docker run -d \
  --name mysql-employees \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=college \
  -v $PWD/data:/var/lib/mysql \
  genschsa/mysql-employees

で動かせる

Step3-1 DB GUIアプリを入れる

image.png
Sequel Aceの様なGUIでDBを操作できるアプリケーションを入れる。
Windowsの場合や、他のGUIアプリケーションが良いならMySQLのおすすめ便利クライアントツールを参考にしてみてください。

本記事でGUIツールでの利用を

Step3-2 GUIアプリで接続する

docker runの際にmysqlのパスワードをcollege、コンテナのポート3306とローカルのポート3306を繋げているのでこの情報を元にGUIアプリから操作をする事ができる。

image.png

設定はこの様にHostを自分のPC、ユーザー名をroot、パスワードにcollegeという様に設定すればどの環境でも接続できるはず。

あとはSelect Databaseにemployeesを設定して中身を確認し、

image.png

データを追加したり

image.png

消したり

image.png

あとはWeb上のドキュメントを読んで試したりするだけ。
(例: MySQL 5.6 リファレンスマニュアル)
楽しみましょう!

本記事を書いたきっかけ


を見てSQLの操作を勉強する時、データベースの中身を用意するのが面倒くて他の事に目移りしたんだよなぁと思って書きました。

この中のデータはEmployees Sample Databaseで公開されているので、最新のMySQLでイメージ
作って試すのも面白そうですね。

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

低コストでSQLを勉強する方法【Employees Sample Database+Docker+GUI Toool】

macOS前提の記述ですが、他OSでもある程度対応できるはずです。

Step1 Dockerを入れる

Dockerを入れる。

Step1-2 Dockerの操作を補助するツールを入れる(任意)

Kitematicを入れる。
想定読者層がDockerやSQLに慣れていない人であり、コンテナの停止や再起動といった事がGUIでできるため推奨。

Step2 genschsa/mysql-employeesをpullする

image.png
Docker Hubkからgenschsa/mysql-employeesを入れる。

docker pull genschsa/mysql-employees

でイメージを持ってきて

docker run -d \
  --name mysql-employees \
  -p 3306:3306 \
  -e MYSQL_ROOT_PASSWORD=college \
  -v $PWD/data:/var/lib/mysql \
  genschsa/mysql-employees

で動かせる

Step3-1 DB GUIアプリを入れる

image.png
Sequel Aceの様なGUIでDBを操作できるアプリケーションを入れる。
Windowsの場合や、他のGUIアプリケーションが良いならMySQLのおすすめ便利クライアントツールを参考にしてみてください。

本記事でGUIツールでの利用を

Step3-2 GUIアプリで接続する

docker runの際にmysqlのパスワードをcollege、コンテナのポート3306とローカルのポート3306を繋げているのでこの情報を元にGUIアプリから操作をする事ができる。

image.png

設定はこの様にHostを自分のPC、ユーザー名をroot、パスワードにcollegeという様に設定すればどの環境でも接続できるはず。

あとはSelect Databaseにemployeesを設定して中身を確認し、

image.png

データを追加したり

image.png

消したり

image.png

あとはWeb上のドキュメントを読んで試したりするだけ。
(例: MySQL 5.6 リファレンスマニュアル)
楽しみましょう!

本記事を書いたきっかけ


を見てSQLの操作を勉強する時、データベースの中身を用意するのが面倒くて他の事に目移りしたんだよなぁと思って書きました。

この中のデータはEmployees Sample Databaseで公開されているので、最新のMySQLでイメージ
作って試すのも面白そうですね。

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

ローカルから直接Dockerのデータベースをバックアップ・レストアする

経緯

バックアップ・レストア方法をググるとほとんどの記事はdocker cpしてDockerコンテナの中に入って直接コマンド叩いてたり、docker runでバックアップ、レストアのコマンドを実行していたりしている記事が多かったのですが、そうではなくてワンライナーで直接バックアップ、レストアする方法が知りたかったのでまとめてみました。

基本的なバックアップ・レストア方法を記載します。もしパスワードやデータベース名が必要な場合は適宜コマンドのオプションで指定してください。

今回はPostgreSQL、MySQL、MongoDBについてまとめますが、その他のDBでも同様の方法で可能だと思います。

定数

以下の定数はコマンド等で確認してください。
CONTAINER_NAME : Dockerのコンテナ名またはID。docker psで確認する。
USERNAME : Docker内のデータベースのユーザ名
PASSWORD : Docker内のデータベースのパスワード
DATABASE_NAME : Docker内のデータベース名
SERVICE_NAME: docker-composeのyamlに記載しているサービス名。docker-compose config --service で確認する。

PostgreSQL

Dockerコマンドを使用する場合

バックアップ

docker exec CONTAINER_NAME pg_dumpall -U USERNAME > dump.sql

gzipで圧縮する場合は以下

docker exec CONTAINER_NAME pg_dumpall -U USERNAME | gzip > dump.sql.gz

レストア

cat dump.sql | docker exec -i CONTAINER_NAME psql -U USERNAME

gzipで圧縮されたファイルをレストアする場合は以下

gunzip < dump.sql.gz | docker exec -i CONTAINER_NAME psql -U USERNAME

docker-compose コマンドを使用する場合

バックアップ

docker-compose exec -T SERVICE_NAME pg_dumpall -U USERNAME > dump.sql

レストア

cat dump.sql | docker-compose exec -T SERVICE_NAME psql -U USERNAME

MySQL

Dockerコマンドを使用する場合

バックアップ

docker exec CONTAINER_NAME mysqldump -u USERNAME -pPASSWORD DATABASE_NAME > dump.sql

gzipで圧縮する場合は以下

docker exec CONTAINER_NAME mysqldump -u USERNAME -pPASSWORD DATABASE_NAME | gzip > dump.sql.gz

レストア

cat dump.sql | docker exec -it CONTAINER_NAME mysql -u USER_NAME -pPASSWORD DATABASE_NAME

gzipで圧縮されたファイルをレストアする場合は以下

gunzip < dump.sql.gz | docker exec -i CONTAINER_NAME mysql -u USER_NAME -pPASSWORD DATABASE_NAME

docker-compose コマンドを使用する場合

バックアップ

docker-compose exec -T SERVICE_NAME mysqldump -u USERNAME -pPASSWORD DATABASE_NAME > dump.sql

レストア

cat dump.sql | docker-compose exec -T SERVICE_NAME mysql -u USER_NAME -pPASSWORD DATABASE_NAME

MongoDB

dockerコマンドを使用する場合

バックアップ

docker exec CONTAINER_NAME mongodump --archive > db.dump

gzipで圧縮する場合は以下

docker exec CONTAINER_NAME mongodump --archive --gzip > db.dump.gz

レストア

docker exec -i <mongodb container id or name> mongorestore --archive < db.dump

gzipで圧縮されたファイルをレストアする場合は以下

docker exec -i CONTAINER_NAME mongorestore --archive --gzip < db.dump.gz

docker-compose コマンドを使用する場合

バックアップ

docker-compose exec -T SERVICE_NAME mongodump --archive > db.dump

レストア

docker-compose exec -T SERVICE_NAME mongorestore --archive < db.dump

参考資料

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

PDOを使ってMySQLに接続する記述(個人用メモ)

はじめに

プログラミング初学者です。
Qiitaに挑戦ということで、初投稿になります。
今回は個人用メモの投稿です。
わかりにくいとは思いますが、
これからどんどん投稿してQiitaに慣れていき、
皆さんのお役に少しでも立てればなぁという所存です。

PDOとは?

PHP Data Objectの略。

標準のデータベース接続クラスのこと。

なぜPDOを使うのか?

データベース操作はシステムごとに命令が異なるが、PDOなら同じ関数で操作できる。

例)データベースに接続
MySQL => mysql_connect();
PostgreSQL => pg_connect();

環境

  • MacBook Pro13
  • MAMP ver. 6.2

MySQLデータベースに接続する

$dbh = new PDO($dsn,$user,$pass,opt);

$dbh
データベースハンドルの略。(操作しますよーの意味)

new PDO
PDO接続を呼び出す(PDOクラスのインスタンスを作成)

$dsn
データソースネームの略。

$dsn = 'mysql:host=ホスト名;dbname=db名;charset=utf8';

$user

$user = 'root'; //初期設定

$pass

$pass = 'root'; //初期設定

opt
オプションです。さまざまなオプションがあるので、
ググってみよう。

phpMyAdminでユーザを設定

ユーザとは?

データベースを操作する権限を持つ
初期設定は、全権限を持つroot(ルート)ユーザが用意

権限の分け方

  • 全権限(root)
  • テーブルの操作権限
  • カラムの操作権限

try~catchとは?

DBのエラーをチェックできる構文
例外処理と呼ばれる

書き方

try {
 // 通常処理を書く。問題なければ次へ。
}catch() {
// 例外(エラー)が発生した場合に処理
}

実際にこんな感じ

try {
    $dbh = new PDO($dsn,$user,$pass,[
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEOTION,
    ]);
    echo '接続成功';
    $dbh = null;
} catch(PDOException $e) { 
    echo '接続失敗' . $e->getMessage();
    exit();
};



本当にただのメモ投稿でした。

以上です。

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

【PHP】queryとprepare/execute,fetchの意味

初めに

・PHP/MySQLを触り始めて1か月
こちらのアプリ開発をした際に思った疑問点を深く学んでみようと思い記事を執筆

課題

PHP側でデータベースから値を取得したり、データベースに値を保存したりする際に

$members = $db->prepare('...');
$members->execute('...');
$member = $members->fetch();

$member = $db->query('...');

を何気なく使っていましたが、各関数の意味をしっかり理解せずに使っていました。

現在の理解(Before)

現在の私の各関数の理解は以下の通りです。

query

SELECT文を使い、かつforeachで繰り返し処理をする際に使う関数

prepare

SELECT文を使い、かつ取り出す値が単体である(繰り返し処理等をしない)際に使う関数

execute

prepareとペアで使うので、prepareで取得したデータベース上の値をPHPで受け取る

fetch

executeで取り出した値を列毎に配列で受け取る

学習結果(After)

query

・SQLステートメントを実行し、結果セットをPDOStatementオブジェクトとして返す
 ⇒prepareとexecuteを一緒に実行する
・prepareとの違い:変動値がない場合

// 変動値がないコード
$pdo->query('SELECT * FROM user');

答え合わせ:×

prepare

文を実行する準備を行い、文オブジェクトを返す
⇒実行したいSQL文をセットする
・queryとの違い:変動値がある場合

// 変動値があるコード
$stmt = $pdo->prepare("SELECT * FROM user WHERE name=:name");

答え合わせ:△

execute

SQLステートメントを実行し、作用した行数を返す
⇒SQLの実行
答え合わせ:△

fetch

結果セットから次の行を取得する
⇒executeで取得した行の値を取得する
答え合わせ:〇

まとめ

・特にqueryとprepare/executeの違いが言語化しつつ学べました。
・イメージは間違えていなかったことがわかりましたが、公式ドキュメントを見ると適切な言葉選びをされている、と実感し改めて1次情報で学習を進めることの大切さを学びました。

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

【PHP】queryとprepare/execute/fetchの意味

初めに

・PHP/MySQLを触り始めて1か月
こちらのアプリ開発をした際に思った疑問点を深く学んでみようと思い記事を執筆

課題

PHP側でデータベースから値を取得したり、データベースに値を保存したりする際に

$members = $db->prepare('...');
$members->execute('...');
$member = $members->fetch();

$member = $db->query('...');

を何気なく使っていましたが、各関数の意味をしっかり理解せずに使っていました。

現在の理解(Before)

現在の私の各関数の理解は以下の通りです。

query

SELECT文を使い、かつforeachで繰り返し処理をする際に使う関数

prepare

SELECT文を使い、かつ取り出す値が単体である(繰り返し処理等をしない)際に使う関数

execute

prepareとペアで使うので、prepareで取得したデータベース上の値をPHPで受け取る

fetch

executeで取り出した値を列毎に配列で受け取る

学習結果(After)

query

・SQLステートメントを実行し、結果セットをPDOStatementオブジェクトとして返す
 ⇒prepareとexecuteを一緒に実行する
・prepareとの違い:変動値がない場合

// 変動値がないコード
$pdo->query('SELECT * FROM user');

答え合わせ:×

prepare

文を実行する準備を行い、文オブジェクトを返す
⇒実行したいSQL文をセットする
・queryとの違い:変動値がある場合

// 変動値があるコード
$stmt = $pdo->prepare("SELECT * FROM user WHERE name=:name");

答え合わせ:△

execute

SQLステートメントを実行し、作用した行数を返す
⇒SQLの実行
答え合わせ:△

fetch

結果セットから次の行を取得する
⇒executeで取得した行の値を取得する
答え合わせ:〇

まとめ

・特にqueryとprepare/executeの違いが言語化しつつ学べました。
・イメージは間違えていなかったことがわかりましたが、公式ドキュメントを見ると適切な言葉選びをされている、と実感し改めて1次情報で学習を進めることの大切さを学びました。

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