20200530のMySQLに関する記事は7件です。

Sequel Pro リモートDBへのSSH接続

はじめに

Sequel Proを使用してWordPressなどのリモートDBへSSH接続する際のメモです。

DBクライアントが内部でどういった動きをしているのかを把握して
実際にCLIで確認しながら設定をします。

SSHホストの内容を確認

$ ssh ${ユーザー名}@52.196.***.** -i ~/.ssh/hoge.pem

もしくは

$ cat ~/.ssh/config 
~/.ssh/config
Host hoge-server
  HostName 52.196.***.**
  User ${ユーザー名}
$ ssh hoge-server

MySQLホストの内容を確認 (MySQLへログイン)

サーバーへログイン後..

$ mysql -u ${ユーザー名} -h 127.0.0.1 -D ${データベース名} -p
Enter password:?

image.png

接続が成功しました?

解説

リモートサーバー内のMySQL情報

項目 内容
MySQLホスト リモートサーバー内のMySQLホスト名を入力します※
ユーザー名 MySQLのユーザー名を入力します
パスワード MySQLのパスワードを入力します
データベース 指定する場合はデータベース名を入力します
ポート デフォルトは3306です

※localhostで指定した場合、TCP/IPを使用した接続ではなくソケットファイルでの接続になり
ポート指定のオプションが無視されるため、基本的には127.0.0.1で接続をします。

リモートサーバーに接続するための情報

項目 内容
SSHホスト ssh接続する先(リモートサーバー)のホスト名を入力します
SSHユーザー ssh接続する先のユーザー名を入力します
SSHパスワード パスワードを設定している場合は入力します※
SSHポート ポートの指定がある場合は入力します

~/.ssh配下にある鍵は自動的にcheckされます。

切り分けて考える

DBクライアントが内部でどういった動きをしているのかが分かると
例えば接続がうまくいかない際に
「そもそもリモートサーバーへのssh接続はできているのか?」
など、問題を切り分けて対処することができます。

SSHホストとSSHパスワード
MySQLのホスト名のみを入力して接続を試みてみます。
(MySQLのユーザー名とパスワードは、あえて入力しません)

image.png

この状態で接続をすると

image.png

このように、エラー文に『MySQLの応答』が表示されるため
リモートサーバーへのssh接続には成功している
と、判断することが出来ます。

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

Sequel PRO リモートDBへのSSH接続

はじめに

Sequel Proを使用してWordPressなどのリモートDBへSSH接続する際のメモです。

DBクライアントが内部でどういった動きをしているのかを把握して
実際にCLIで確認しながら設定をします。

SSHホストの内容を確認

$ ssh ${ユーザー名}@52.196.***.** -i ~/.ssh/hoge.pem

もしくは

$ cat ~/.ssh/config 
~/.ssh/config
Host hoge-server
  HostName 52.196.***.**
  User ${ユーザー名}
$ ssh hoge-server

MySQLホストの内容を確認 (MySQLへログイン)

サーバーへログイン後..

$ mysql -u ${ユーザー名} -h 127.0.0.1 -D ${データベース名} -p
Enter password:?

image.png

接続が成功しました?

解説

リモートサーバー内のMySQL情報

項目 内容
MySQLホスト リモートサーバー内のMySQLホスト名を入力します※
ユーザー名 MySQLのユーザー名を入力します
パスワード MySQLのパスワードを入力します
データベース 指定する場合はデータベース名を入力します
ポート デフォルトは3306です

※localhostで指定した場合、TCP/IPを使用した接続ではなくソケットファイルでの接続になり
ポート指定のオプションが無視されるため、基本的には127.0.0.1で接続をします。

リモートサーバーに接続するための情報

項目 内容
SSHホスト ssh接続する先(リモートサーバー)のホスト名を入力します
SSHユーザー ssh接続する先のユーザー名を入力します
SSHパスワード パスワードを設定している場合は入力します※
SSHポート ポートの指定がある場合は入力します

~/.ssh配下にある鍵は自動的にcheckされます。

切り分けて考える

DBクライアントが内部でどういった動きをしているのかが分かると
例えば接続がうまくいかない際に
「そもそもリモートサーバーへのssh接続はできているのか?」
など、問題を切り分けて対処することができます。

SSHホストとSSHパスワード
MySQLのホスト名のみを入力して接続を試みてみます。
(MySQLのユーザー名とパスワードは、あえて入力しません)

image.png

この状態で接続をすると

image.png

このように、エラー文に『MySQLの応答』が表示されるため
リモートサーバーへのssh接続には成功している
と、判断することが出来ます。

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

DockerでCakePHP4.0.8さわってみました。(apach)

はじめに

今回githubの方にまとめる形をとってみました!!

手順まとめてあるので以下見てください!:relaxed:
https://github.com/sachiko-kame/docker_cakePHP

ちなみにDockerコマンド打てるところからお願いします!
打てない場合『困ったときは以下も』の一番上のリンクから行う形になるかんじです!
apacheとかあまりないような気がして今回載せました。

一応:

CakePHP 4.0.8 Strawberry
php7.4
mysql8
docker ver3
Apache/2.4.38 (Debian) ←指定したわけでなくコマンドで確認したもの($ apachectl -v)

工夫したところ

ボリュームするとコピーファイル消えるので、コンテナ中で作成したものをコマンドで移動すると言う方法を取りました。
コマンドで移動出来なかったものは手作業で移動しています。
apacheのファイルのみ移動すれば問題ないと思ったのですが本来入るべき場所にとあるもの全部移動した感じです。

image5.png

困ったときは以下も

全部自分の記事です!:relaxed:

Dockerの大まかなイメージから自分が作成したものをDockerhubにあげて、インストールして実行まで

[Docker][apache][CakePHP]The requested URL was not found on this server.

CakePHPハマったの対策

とりあえずhtmlの表示をDocker使って行う[apacheバージョン]

最後に

テーブルの自動作成とか出来たら良かったのですがそこまで出来ませんでした?

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

dockerのMutagen-based caching導入におけるファイル権限が変わってしまう場合の対応

はじめに

docker for macを使っていましたが速度が遅く、vagrantを立ててその中にdockerを構築しようと思ったのですが、dockerのアップデートで Mutagen-based cachingが導入されたようでdocker for macを快適に利用できるようになりました。

ただファイルの権限が変わってしまうようで、自分はmysqlが下記のエラーが発生して起動できなくなってしまいました。

mysqld: can't create/write to file

この対処法を書いていきます。

dockerの再インストール

現在Edge Releaseされているものはmutageでファイルを同期させた場合権限が変わってしまい、それに対してissueが上がっていました。

https://github.com/docker/for-mac/issues/4593

このissueにて早速修正されたものがアップされているようですので下記のURLからdockerをダウンロードして再インストールし、再度ファイルの同期を行えば権限の問題が解消されます。

https://desktop-stage.docker.com/mac/edge/45429/Docker.dmg

またデフォルトでの権限を変更したい場合はホームディレクトリ直下に.mutagen.ymlファイルを作成して

sync:
  defaults:
    permissions:
      defaultFileMode: 0655
      defaultDirectoryMode: 0755

みたいに権限のデフォルト設定ができるようですが、自分はうまくいきませんでした....

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

Rails consoleのIncorrect string valueエラー対応

概要

Rails Consoleでcsvインポート中に以下のエラーが出たのでその対応記録

ActiveRecord::StatementInvalid: 
Mysql2::Error: Incorrect string value: '\xE3\x82\xA8\xE3\x82\xB3...' 
for column 'name' at row 1: 
INSERT INTO `contracts` (`account_id`, `name`, `created_at`, `updated_at`) 
VALUES (101, 'エコノミー', '2020-05-30 01:50:58', '2020-05-30 01:50:58')
from /usr/local/bundle/gems/mysql2-0.4.10/lib/mysql2/client.rb:120:in `_query'

character_set_databaseの対応

character_set_database、character_set_serverがlatin1になっていた。

MySQL [example]> show variables like "chara%";
+--------------------------+-------------------------------------------------+
| Variable_name            | Value                                           |
+--------------------------+-------------------------------------------------+
| character_set_client     | utf8mb4                                         |
| character_set_connection | utf8mb4                                         |
| character_set_database   | latin1                                          |
| character_set_filesystem | binary                                          |
| character_set_results    | utf8mb4                                         |
| character_set_server     | latin1                                          |
| character_set_system     | utf8                                            |
| character_sets_dir       | /rdsdbbin/oscar-5.7.12.200076.0/share/charsets/ |
+--------------------------+-------------------------------------------------+
8 rows in set (0.001 sec)

AWS RDS Auroraのパラメータグループでutf8mb4に設定

image.png

MySQL [example]> show variables like "chara%";
+--------------------------+-------------------------------------------------+
| Variable_name            | Value                                           |
+--------------------------+-------------------------------------------------+
| character_set_client     | utf8mb4                                         |
| character_set_connection | utf8mb4                                         |
| character_set_database   | utf8mb4                                         |
| character_set_filesystem | binary                                          |
| character_set_results    | utf8mb4                                         |
| character_set_server     | latin1                                          |
| character_set_system     | utf8                                            |
| character_sets_dir       | /rdsdbbin/oscar-5.7.12.200076.0/share/charsets/ |
+--------------------------+-------------------------------------------------+
8 rows in set (0.001 sec)

DEFAULT_CHARACTER_SET_NAMEの対応

それでもエラーが出たので継続調査。
DEFAULT_CHARACTER_SET_NAMEがlatin1になっていた。

MySQL [example]> select * from INFORMATION_SCHEMA.SCHEMATA;
+--------------+--------------------+----------------------------+------------------------+----------+
| CATALOG_NAME | SCHEMA_NAME        | DEFAULT_CHARACTER_SET_NAME | DEFAULT_COLLATION_NAME | SQL_PATH |
+--------------+--------------------+----------------------------+------------------------+----------+
| def          | information_schema | utf8                       | utf8_general_ci        | NULL     |
| def          | example            | latin1                     | latin1_swedish_ci      | NULL     |
| def          | mysql              | latin1                     | latin1_swedish_ci      | NULL     |
| def          | performance_schema | utf8                       | utf8_general_ci        | NULL     |
| def          | sys                | utf8                       | utf8_general_ci        | NULL     |
| def          | tmp                | latin1                     | latin1_swedish_ci      | NULL     |
+--------------+--------------------+----------------------------+------------------------+----------+
6 rows in set (0.004 sec)

MySQL [example]> SELECT @@character_set_database, @@collation_database;
+--------------------------+----------------------+
| @@character_set_database | @@collation_database |
+--------------------------+----------------------+
| latin1                   | latin1_swedish_ci    |
+--------------------------+----------------------+
1 row in set (0.000 sec)

以下のSQLでutf8mb4に設定

MySQL [example]> ALTER DATABASE example CHARACTER SET utf8mb4 COLLATE utf8mb4_bin;

MySQL [example]> SELECT @@character_set_database, @@collation_database;
+--------------------------+----------------------+
| @@character_set_database | @@collation_database |
+--------------------------+----------------------+
| utf8mb4                  | utf8mb4_bin          |
+--------------------------+----------------------+
1 row in set (0.000 sec)

テーブルのDEFAULT CHARSETの対応

それでもエラーが出たので、テーブルを調査。
DEFAULT CHARSETがlatin1になっていた。

MySQL [example]> SHOW CREATE TABLE contracts;
+-----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table     | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
+-----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| contracts | CREATE TABLE `contracts` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `account_id` int(11) DEFAULT NULL,
  `name` varchar(255) DEFAULT NULL,
  `created_at` datetime NOT NULL,
  `updated_at` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 |
+-----------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.006 sec)

以下のSQLでutf8mb4に設定

MySQL [example]> ALTER TABLE contracts CONVERT TO CHARACTER SET utf8mb4;

MySQL [example]>  SHOW CREATE TABLE contracts;
+-----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table     | Create Table                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
+-----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| contracts | CREATE TABLE `contracts` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `account_id` int(11) DEFAULT NULL,
  `name` varchar(255) DEFAULT NULL,
  `created_at` datetime NOT NULL,
  `updated_at` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 |
+-----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.005 sec)

これで正しく実行できるようになった。

テーブルの設定が最優先されていたので、
はじめからテーブルのDEFAULT CHARSETをutf8mb4に設定していれば解決したと思うが、
DBMS、DBの文字コード設定を見直す良い機会になったと思う。

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

[PHP] mysqliでデータをSELECTした際に数値型がすべて文字列になってしまう件

やりたかったこと

phpから、mysqliでもってSQL実行し取得したときに、データベースでINT型またはFLOAT型になっているのにすべてSTRING型になってしまうので、数値のものは数値として取得したい。なぜかと言うと、最終的にjavascriptに持ってきてid順とかで並べ替えたりするときに、1と2と10が文字列だと1→10→2と並んでしまったりする。いちいちparseIntしなければならない。

最終的なコード(PHP)

// SQL実行
$result = $this->mysqli->query($sql); //何かしらSELECTしてくる

// 連想配列に格納
$data = array(); //格納先
while ($row = $result->fetch_assoc()) { //一行ずつ配列で取得して$dataに入れていく。これはよくある手法

    // --- ここから数値変換処理 ---
    foreach ( $row as $key => &$value ) {
        if(is_numeric($value)) $value *= 1; //すべての要素に対して、数値であれば1を掛けることで自動で型変換してもらう(PHPの仕様)
    }
    unset($value); //誤作動防止
    // --- ここまで ---

    $data[] = $row;
}

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

DBのバックアップファイルを作ったり戻したりする

概要

本番環境からDBのバックアップを取得したり、自身のローカル環境にそのバックアップファイルを
入れたりしたい場合がある。
そのような時に有用なコマンドを示す。

環境

  • MySQL5.7

DBのバックアップ

以下のコマンドにより、DBのバックアップファイルを作成できる。
なお、dumpという形式で出力する。

> mysqldump -u ユーザー名 -p データベース名 > ~/ファイル名.dump

上記のようなコマンドにより、「データベース名というデータベース」を「ファイル名.dump」という形式で
ホームディレクトリに出力できる。

DBのリストア

以下のコマンドにより、前項で取得したバックアップファイルをDBに戻すことができる。

> mysql -u ユーザー名 -p -D データベース名 < ~/ファイル名.dump

上記のようなコマンドにより、ホームディレクトリに出力した「ファイル名.dump」を「データベース名というデータベース」にリストアすることができる。

終わりに

業務などでも、バックアップファイルの取得やそのリストア作業はちょくちょくあるので、
試してみると良い。

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