- 投稿日:2020-01-20T20:54:40+09:00
Docker MySQLのバージョン変更する方法
はじめに
Docker MySQLのバージョンを 8.0 から 5.7 に下げる際に苦戦したので、一連の流れをまとめました。
Laradockを用いてDocker上でLaravelを動かす環境を作成しました。
MySQLバージョンを変更する一連の流れ
laradockにあるファイルのMySQLのバージョンを 5.7 に変更します。
.env### MYSQL ################################################# MYSQL_VERSION=5.7コンテナを停止し、status が exited になっているのを確認。
mysqlのコンテナを削除。$ docker-compose stop $ docker ps -a $ docker rm コンテナID(mysql)MYSQLのバージョンを変更する場合は、 DATA_PATH_HOST で設定したフォルダを削除して、イメージを作成し直す必要があるらしい。
そのフォルダは下記コマンドで参照出来る。$ cat .env | grep DATA_PATH_HOST DATA_PATH_HOST=~/.laradock-アプリ名/data (人によってバラバラ。)そのフォルダを削除。
$ rm -rf ~/.laradock-アプリ名/data次にイメージを削除するのだが、
「dataが削除されますがよろしいですか?」 的な確認文が恐らく出てくるので良ければ y で enter。$ docker images $ docker rmi イメージID(laradock_mysql) -fキャッシュを消し再度ビルド。
$ docker-compose build --no-cache mysql最後に status が up になっているか。
なっていれば mysql のバージョンを確認し 5.7系になっていればOK。$ docker ps -a $ docker-composer exec mysql mysql --version以上で、動くはずです。
Dockerを勉強し始めたばかりで、説明が大雑把なので
わかりにくい箇所や、疑問点など。
また、勉強する上で参考になったサイトや技術書など教えていただけると幸いです。
- 投稿日:2020-01-20T16:23:11+09:00
CREATE TABLEで失敗した話(メモ)
やったこと
これの動画を参考にして
mysql> creata table book { id int, b_name varchar(255), name varchar(255), c_name varchar(255), year char(30) };で実行してみたがダメだった。
これを参考にしてみたら
mysql> CREATE TABLE `book` ( `id` int(10), `b_name` varchar(255), `name` varchar(255), `c_name` varchar(255), `year` char(30) );
Query OK, 0 rows affected, 1 warning (0.02 sec)
で成功。データベース作成のベースとなった記事はこちら
- 投稿日:2020-01-20T11:48:05+09:00
Dockerコンテナ環境のMySQLデータベースがSequelProに反映されない
結論
・コンテナのMySQLのホストなどががローカル環境のMySQLと同じだった。
→SequelProにログインする際にローカルのMySQLがSequelProに反映されていたので
コンテナのMySQLデータベースが反映されなかった。なぜそうなったか
・ローカルのMySQLを自動起動に設定していたから。
対策
①以下の記事を参考に自動起動を停止
MySQLの自動起動を無効に自動起動を設定しているサービスのリストを確認
$ brew services list Name Status User Plist redis stopped mysql stopped mysql@5.6 started username /Users/username/Library/LaunchAgents/homebrew.mxcl.mysql@5.6.plist chromedriver stopped自動起動設定を無効にする
自動起動設定を無くしたいサービスの名前(今回は、mysql@5.6)を次のコマンドの最後に設定します。$ brew services stop mysql@5.6(この部分は止めたいサービス名を入力してください) ==> Successfully stopped `mysql@5.6` (label: homebrew.mxcl.mysql@5.6)きちんとできたか確認
$ brew services list Name Status User Plist redis stopped mysql stopped mysql@5.6 stopped chromedriver stopped②コンテナの依存を更新して再度SequelProにログイン。
、、、、success!!
- 投稿日:2020-01-20T05:00:37+09:00
Moodle 3.8 マニュアル - MySQL
MySQL
MySQL は Moodle のインストールを支えているデータベースサポートのうちの一つです。
内容
1 MySQL をインストールする
1.1 完全な UTF-8 サポートを設定する
2 Moodle データベースを作成する
2.1 コマンドライン
2.2 phpMyAdmin
3 どのデータベースがどの Moodle に属しているか
4 関連項目1 MySQL をインストールする
- もしあなたが Linux を走らせているのなら、あなたの好みはあなたのパッケージマネジャーを使ってインストールするということになるべきです。これはどんな入手可能なアップデートも保証します。しかしながら、apt-get あるいは yum をディストリビューションにしたがって使用することもできます。
- ほとんどの人気のあるオペレーティングシステム用のインストーラーは http://www.mysql.com/downloads/mysql/ において入手可能です。
- mysql を直接ソースからビルドするのは可能でありかなり簡単ですが推奨されません(事前にビルドされたバイナリはもっと最適化されています)。
- 'root' ユーザーにはパスワードを設定(http://dev.mysql.com/doc/refman/5.0/en/default-privileges.html を参照)してください。
- my.cnf (MySQL の設定ファイル)をあなたの要求に合わせてインストールし設定することを考慮してください。デフォルト設定は通常はメモリーの使用対パフォーマンスの観点において大変保守的です。'max_allowed_packet' 設定を少なくとも 4メガバイトに増加させてください。
- もしあなたがマスター/スレーブ レプリケーションを使用するつもりなら、binlog_format = 'ROW' を my.cnf の [mysqld] binlog_format = 'ROW' に追加するべきです。 そうでなければ、Moodle はデータベースへの書き込みができないでしょう。
1.1 完全な UTF-8 サポートを設定する
MySQL の設定において UTF-8 の完全なサポートを得ることを推奨します。これがなされていないと、ある文字セット特に絵文字が使用できません。あなたのサイトがインストールされた後に設定することは可能ですが、インストール前に行う方が簡単です。
First check if this is already configured by running the following statement, e.g. at the mysql> prompt or in phpMyAdmin:
まず、例えば phpMyAdmin において mysql> プロンプトで次の宣言を走らせることで既に設定されているかをチェックしてください。
SHOW GLOBAL VARIABLES WHERE variable_name IN ('innodb_file_format', 'innodb_large_prefix', 'innodb_file_per_table');
変数名 値 innodb_file_format Barracuda innodb_file_per_table ON innodb_large_prefix ON もし 3 つの設定が上記のリストにあるならばさらなる設定変更は必要なく Moodle データベースの作成(翻訳準備中)をスキップできます。
もしあなたの設定がこのリストにマッチしないのならあなたの MySQL 設定ファイルを編集する必要があります。Linux ではこのファイルは /etc/my.cnf あるいは /etc/mysql/my.cnf となり、Microsoft Windows では my.ini となります。
- 注:変更前にはあなたの設定ファイルをバックアップすべきです。
- 注:変更前にはあなたのデータベースをバックアップすべきです。
- 注:この変更によりデータベースを使用しているその他のシステムは影響を受けます。
設定ファイルに次の設定を追加してください。
[client] default-character-set = utf8mb4 [mysqld] innodb_file_format = Barracuda innodb_file_per_table = 1 innodb_large_prefix = 1 character-set-server = utf8mb4 collation-server = utf8mb4_unicode_ci skip-character-set-client-handshake [mysql] default-character-set = utf8mb4これらの設定を適用するために MySQL をリスタートしてください。
設定を適用するのが難しければ、さらなるサポート情報については MySQL_full_unicode_support(https://docs.moodle.org/38/en/MySQL_full_unicode_support)(翻訳準備中)を参照してください。
もしある理由からここに記述している推奨設定に変更できないとしても、Moodle のインストールを続けられます。しかしながらデフォルト文字セットと照合をそれぞれ utf8 と utf8_unicode_ci にしてください。
2 Moodle データベースを作成する
空の Moodle データベースを作成するステップとなります。あなた自身のデータベース名、ユーザー名とパスワードと適切に代替してください。
指示は web サーバーと MySQL サーバーが同じマシンにあると推察しています。このケースでは 'dbhost' は 'localhost' です。それらが異なるマシンであるなら次の指示で 'localhost' を web サーバーの名前に置き換え、'dbhost' 設定はデータベースサーバーの名前になるでしょう。データベースには "Character は utf8mb4 Collation は utf8mb4_unicode_ci とするのを推奨します。あなたがデータベースを作成する際にこれらの値を設定するためのオプションが得られます。もし選択ができなければ、デフォルトオプションでおそらくよいでしょう。古いサーバーへのインストールは誤った設定になるかもしれません。
2.1 コマンドライン
- 'mysql' コマンドラインクライアントを使用してデータベースを作成するには、まず MySQL にログインします。
$ mysql -u root -p Enter password:(あなたが前に設定した MySQL の 'root' ユーザーのための - あるいは与えられた - パスワードを入力してください)。いくつかの前置きの後これは mysql> プロンプトになります。
- 新しいデータベースを作成してください('moodle' という名前で - 必要であればあなた自身の名前に置き換えてください)。
もし推奨される完全な UTF-8 サポートに設定できたならば次を走らせてください。
mysql> CREATE DATABASE moodle DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;もし推奨される完全な UTF-8 サポートがないなら、次を走らせてください。
mysql> CREATE DATABASE moodle DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;
- ユーザー/パスワード を最小特権とともに追加してください。
mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,CREATE TEMPORARY TABLES,DROP,INDEX,ALTER ON moodle.* TO moodleuser@localhost IDENTIFIED BY 'yourpassword';...これは 'moodleuser' というユーザーを 'yourpassword' で作成します。強いパスワードにすることを確認し 'GRANT ALL' にする誘惑に負けないでください。
- mysql から出ます。
mysql> quit2.2 phpMyAdmin
phpMyAdmin は MySQL のための web ベースの管理者ツールです。もしこれが入手可能ならばそれを使って新しいデータベースを作成できます。上述のように推奨される完全な UTF-8 のサポートを設定したのならutf8mb4_unicode_ci の照合を選択してください。もし推奨される完全な UTF-8 のサポートがなければ utf8_unicode_ci の照合を選択してください。
3 どのデータベースがどの Moodle に属しているか
いくつかの Moodle のインストールを同じサーバーにしたのなら、あなたの MySQL サーバーには複数のデータベースがあるでしょう。名前は _mdl1 _mdl2 _mdl3 のように内容をほとんど反映しません。ではどのデータベースがどの Moodle にたいおうしているのでしょうか?あなたは phpMyAdmin に入り複数のデータベースの "mdl_course" テーブルをチェックしてください。そこで Moodle インストールの名前を見ることができるでしょう。mdl_config テーブルでは Moodle バージョンを見る事ができます。サイトの主要 URL は絶対リンクがあるところを除いてデータベースにはありません。
4 関連項目
MariaDB(翻訳準備中)
MySQL の完全な unicode サポート(翻訳準備中)
MySQL ホームページ
MySQL についての Wikipedia の記事
MySQL のパフォーマンスチューニングについての記事のリストカテゴリ:インストール | SQLデータベース(翻訳準備中)
- 投稿日:2020-01-20T01:32:03+09:00
mysql 忘備録
最初に100回復唱
- データの文字列以外はシングルクオートではなくバッククオート。
- パスワードはシングルクオート。
- @ はクオートの中に入れない。
- 末尾にセミコロン必要。
- 大文字小文字は区別されない。
phpmyadmin が使える環境なら使うべき。
本体インストール
$ sudo apt indtall mysql-client mysql-server $ mysql_secure_installationmysql だけだと失敗する。
root 起動
$ sudo mysql -u root -pユーザの作成
> create user `username`@`localhost` identified by 'password';ローカルユーザの場合。パスワードはシングルクオート。
ユーザへの権限付与
> create database `dbname`; > grant all privileges to dbname.* to `username`@`localhost`;ユーザ一覧
> select user, host from mysql.user;ユーザのパスワード変更
> set password for user = 'password'テーブルの作成
> use database; > create table `tablename` (`id` int (11) auto_increment not null primary key, \ `name` varchar(32) not null, \ `time` timestamp, \ position double(4,3)) \ engine=innodb, charset=utf8;テーブルの構造を見る
> describe tablename; +----------+-------------+------+-----+-------------------+-----------------------------+ | Field | Type | Null | Key | Default | Extra | +----------+-------------+------+-----+-------------------+-----------------------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | name | varchar(32) | NO | | NULL | | | time | timestamp | NO | | CURRENT_TIMESTAMP | on update CURRENT_TIMESTAMP | | position | double(4,3) | YES | | NULL | | +----------+-------------+------+-----+-------------------+-----------------------------+ 4 rows in set (0.00 sec)テーブルへのデータの追加
> insert into tablename values (null, 'hoge', null, 3.1415926 ); > insert into tablename values (null, 'hoge', '2020-01-01 01:02:03' , 1.414213 );データを見る
> select * from tablename; +----+------+---------------------+----------+ | id | name | time | position | +----+------+---------------------+----------+ | 1 | hoge | 2020-01-01 05:34:25 | 3.142 | | 2 | hoge | 2020-01-01 01:02:03 | 1.414 | +----+------+---------------------+----------+ 2 rows in set (0.00 sec)select 文いろいろ
行数を制限する。
> select * from tablename limit by 10;ソートする。asc は昇順、desc は降順。
> select * from tablename order by name asc; > select * from tablename order by name desc; > select * from tablename order by name desc, id asc;検索条件を指定
> select * from tablename where name == 'hoge'; > select * from tablename where id < 10; > select * from tablename where name == 'hoge' and id >= 1; > select * from tablename where time between timestamp('2020-01-01 00:00:00') AND timestamp('2020-01-01 02:00:00'); > select * from tablename where time > timestamp('2020-01-01 02:00:00');datatime 型の場合は
datatime('')
にする。ファイルへの書き出し
セキュリティ設定によって、書き出しに制約がある。
> select @@secure_file_priv; +-----------------------+ | @@secure_file_priv | +-----------------------+ | /var/lib/mysql-files/ | +-----------------------+ 1 row in set (0.00 sec) > select * from tablename into outfile '/var/lib/mysql-files/hoge.sql';
@secure_file_priv
が指定されていると、そこにしか書き出せない。また root 以外はデフォルトではファイル書き出し権限がない。ファイルからの読みこみ
$ sudo mysql -u root < filename.sqlまたは mysql にログインした状態で
> source filename;とする。
テーブル削除
> drop database;警告も何もないので超注意。
キャラクターセットの確認
> show variables like '%char%';