- 投稿日:2020-05-30T22:45:42+09:00
Sequel Pro リモートDBへのSSH接続
はじめに
Sequel Proを使用してWordPressなどのリモートDBへSSH接続する際のメモです。
DBクライアントが内部でどういった動きをしているのかを把握して
実際にCLIで確認しながら設定をします。SSHホストの内容を確認
$ ssh ${ユーザー名}@52.196.***.** -i ~/.ssh/hoge.pemもしくは
$ cat ~/.ssh/config~/.ssh/configHost hoge-server HostName 52.196.***.** User ${ユーザー名}$ ssh hoge-serverMySQLホストの内容を確認 (MySQLへログイン)
サーバーへログイン後..
$ mysql -u ${ユーザー名} -h 127.0.0.1 -D ${データベース名} -p Enter password:?接続が成功しました?
解説
リモートサーバー内の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のユーザー名とパスワードは、あえて入力しません)この状態で接続をすると
このように、エラー文に『MySQLの応答』が表示されるため
リモートサーバーへのssh接続には成功している
と、判断することが出来ます。
- 投稿日:2020-05-30T22:45:42+09:00
Sequel PRO リモートDBへのSSH接続
はじめに
Sequel Proを使用してWordPressなどのリモートDBへSSH接続する際のメモです。
DBクライアントが内部でどういった動きをしているのかを把握して
実際にCLIで確認しながら設定をします。SSHホストの内容を確認
$ ssh ${ユーザー名}@52.196.***.** -i ~/.ssh/hoge.pemもしくは
$ cat ~/.ssh/config~/.ssh/configHost hoge-server HostName 52.196.***.** User ${ユーザー名}$ ssh hoge-serverMySQLホストの内容を確認 (MySQLへログイン)
サーバーへログイン後..
$ mysql -u ${ユーザー名} -h 127.0.0.1 -D ${データベース名} -p Enter password:?接続が成功しました?
解説
リモートサーバー内の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のユーザー名とパスワードは、あえて入力しません)この状態で接続をすると
このように、エラー文に『MySQLの応答』が表示されるため
リモートサーバーへのssh接続には成功している
と、判断することが出来ます。
- 投稿日:2020-05-30T22:34:04+09:00
DockerでCakePHP4.0.8さわってみました。(apach)
はじめに
今回githubの方にまとめる形をとってみました!!
手順まとめてあるので以下見てください!
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のファイルのみ移動すれば問題ないと思ったのですが本来入るべき場所にとあるもの全部移動した感じです。困ったときは以下も
全部自分の記事です!
Dockerの大まかなイメージから自分が作成したものをDockerhubにあげて、インストールして実行まで
[Docker][apache][CakePHP]The requested URL was not found on this server.
とりあえずhtmlの表示をDocker使って行う[apacheバージョン]
最後に
テーブルの自動作成とか出来たら良かったのですがそこまで出来ませんでした?
- 投稿日:2020-05-30T22:06:15+09:00
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みたいに権限のデフォルト設定ができるようですが、自分はうまくいきませんでした....
- 投稿日:2020-05-30T19:57:17+09:00
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に設定
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の文字コード設定を見直す良い機会になったと思う。
- 投稿日:2020-05-30T17:53:49+09:00
[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; }
- 投稿日:2020-05-30T00:13:47+09:00
DBのバックアップファイルを作ったり戻したりする
概要
本番環境からDBのバックアップを取得したり、自身のローカル環境にそのバックアップファイルを
入れたりしたい場合がある。
そのような時に有用なコマンドを示す。環境
- MySQL5.7
DBのバックアップ
以下のコマンドにより、DBのバックアップファイルを作成できる。
なお、dumpという形式で出力する。> mysqldump -u ユーザー名 -p データベース名 > ~/ファイル名.dump上記のようなコマンドにより、「データベース名というデータベース」を「ファイル名.dump」という形式で
ホームディレクトリに出力できる。DBのリストア
以下のコマンドにより、前項で取得したバックアップファイルをDBに戻すことができる。
> mysql -u ユーザー名 -p -D データベース名 < ~/ファイル名.dump上記のようなコマンドにより、ホームディレクトリに出力した「ファイル名.dump」を「データベース名というデータベース」にリストアすることができる。
終わりに
業務などでも、バックアップファイルの取得やそのリストア作業はちょくちょくあるので、
試してみると良い。