20211124のMySQLに関する記事は9件です。

MySQLからデータを取得してpandasで使用する

概要 sqlalchemyを使用してDBに接続し、selectの結果をpandasのDataFrameとして取得する方法です。 使用方法 インストール sqlalchemyとPyMySQLがインストールされていない場合はpipでインストールします。 console pip install sqlalchemy pip install PyMySQL DB接続+データ取得 DBに接続するには create_engine() 関数にURLを指定します。 pandasのread_sql関数にselect文とcreate_engineで作成したengineを指定し実行すると、sqlの実行結果がDataFrameとして取得できます。 python import pandas as pd import sqlalchemy as sa user = 'username' # ユーザ名 password = 'password' # パスワード host = 'localhost' # ホスト名 or IP db = 'database' # データベース port = 3306 # ポート url = f'mysql+pymysql://{user}:{password}@{host}:{port}/{db}?charset=utf8' # engine作成 engine = sa.create_engine(url, echo=False) # pandasのread_sql関数にselect文とengineを指定する query = "select * from table" df = pd.read_sql(query, con=engine)
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【MySQL】シェルスクリプトでMySQLのSQLを実行する

シェルスクリプトでMySQLのSQLを動かそうとしたら詰まりに詰まったので備忘録として やりたいこと ・ rootユーザでシェルスクリプトからmysqlのSQLを実行する ・ 対話処理は悲しいのでやりたくない 環境 ・ホストOS: Windows11 ・ゲストOS: Ubuntu20.04 ・MySQL 8.0.26 ・bash ソースコード #!/bin/bash service mysql start mysql -u root --password='password' -e "drop database if exists dbname;" mysql -u root --password='password' -e "create database dbname;" mysql -u root --password='password' dbname < file.sql このシェルスクリプトを実行すると mysql: [Warning] Using a password on the command line interface can be insecure. という警告文が表示されて処理が失敗しました。 どうやらスクリプトやコマンドにパスワードを直書きすると怒られるようです。 解決方法 パスワードを外部ファイルに切り出してそれを --defaults-extra-file オプションで読み込むと解消できました。 /etc/mysql/my.cnf [client] user = root password = password # 今回はスクリプトを実行するホストとDBのホストが同一なのでhostnameは省略 パスワードが書かれたファイルなので権限は最低限にしておきます。 chmod 600 /etc/mysql/my.cnf スクリプトを以下のように書き換えて再度実行します。 create_database.sh service mysql start mysql --defaults-extra-file=/etc/mysql/my.cnf -u root -e "drop database if exists dbname;" mysql --defaults-extra-file=/etc/mysql/my.cnf -u root -e "create database dbname;" mysql --defaults-extra-file=/etc/mysql/my.cnf -u root dbname < file.sql 警告が出ずに正常にデータベースが作成されました。 まとめ この方法だと自動でデータベースを操作できるので定期的なバックアップやデータベースのメンテナンスも実現できそうですね。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Mac再起動時にSQLに接続できず、Laravelのプロジェクトをローカル環境で確認できなくなった時

以前作成したLaravelのプロジェクトの修正を行おうとしていつも通りMAMPを起動してブラウザで表示しようとしたら、、、 もういやだ 独学者にはこういうのが一番効きます。 開発環境 $ sw_vers ProductName: macOS ProductVersion: 11.6 BuildVersion: 20G165 $ mysql --version mysql Ver 14.14 Distrib 5.7.35, for osx10.16 (x86_64) using EditLine wrapper $ php artisan --version Laravel Framework 6.20.30 解決手順 とりあえず.envのデバッグ設定をオンにして解決手段を模索する。 .env APP_DEBUG=true するとこんな感じのエラーがブラウザに表示される [2002] No such file or directory (SQL: select * from `users` where `id` = 1 limit 1) (View: /Applications/MAMP/htdocs/[Project_name]/resources/views/welcome.blade.php) 意外と単純な理由ってことがわかる。データベースへの接続がうまくいってないみたい。 ひとまずターミナルでMySQLへの接続を試みてみる。 $ mysql -u root -p ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' まあそりゃ接続できないよね。 んでmysql.sockって何だ?と思ったけどどうやら英語で書いてある通りMac内のプログラムとMySQLを通信の処理をしてくれるいいやつらしい。 この仲介役みたいな人がいないからSQLに接続できないらしい。Macをシャットダウンしたときに解雇されたのか。かわいそうに。 だから以下のようにして新しく仲介役を雇用してやる必要があると。 $ touch /tmp/mysql.sock 備忘録: touch・・・現在のディレクトリにとりあえず空のファイルを作ってあげるコマンド。 ここで権限のエラーが出ることがある touch: /tmp/mysql.sock: Permission denied その場合は $ ls -l /tmp/mysql.sock で権限を確認してやり、 $ sudo chown [username]:admin /tmp/mysql.sock で[username]にパーミッションを与えてあげ、改めてtouchしてやる。 備忘録: sudo・・・rootユーザーの権限が必要なコマンドを実行できるようになる。 chown・・・指定したファイルの所有権を変更するコマンド。 これで仲介役が雇え、MySQLの接続準備が整ったので、MySQLを再起動する。 $ mysql.server restart ERROR! MySQL server PID file could not be found! Starting MySQL . SUCCESS! ここのエラーはよくわからないが、MySQLが無事再起動できたようなので改めてブラウザでLaravelを起動してみるとうまくいっていることが確認できた。 初めてこういうふうになった時はめちゃくちゃググりまくって時間がかなりかかってしまったのでそういった方々の役に立てれば、、、!!! まとめ Laravelにブラウザで接続できなくなった時はまず.envファイルのdebugをオンにしてどこで接続がうまくいってないか確認する。 mysql.sockでMySQL接続ができないよと言われたら多分mysql.sockが消えてるので、適切な権限のもと新しくmysql.sockを作成してあげる。 mysqlを再起動してうまくいっていることを確認する。 人生がうまくいく。 参考 https://qiita.com/jonakp/items/477a18d4a94c01a31583 https://www.naka-style-blog.com/mysql-log-in-erorr/ コマンドラインの操作だったり、それらに付随するエラーだったりってなかなかとっつきにくくて難しいのでまだまだ勉強が必要だなと思った今日この頃。何か気になる点やご指摘等ございましたら教えていただけるとありがたいです。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[500 server error]Mac再起動後にSQLに接続できず、Laravelのプロジェクトをローカル環境で確認できなくなった時

以前作成したLaravelのプロジェクトの修正を行おうとしていつも通りMAMPを起動してブラウザで表示しようとしたら、、、 もういやだ 独学者にはこういうのが一番効きます。 開発環境 $ sw_vers ProductName: macOS ProductVersion: 11.6 BuildVersion: 20G165 $ mysql --version mysql Ver 14.14 Distrib 5.7.35, for osx10.16 (x86_64) using EditLine wrapper $ php artisan --version Laravel Framework 6.20.30 解決手順 とりあえず.envのデバッグ設定をオンにして解決手段を模索する。 .env APP_DEBUG=true するとこんな感じのエラーがブラウザに表示される [2002] No such file or directory (SQL: select * from `users` where `id` = 1 limit 1) (View: /Applications/MAMP/htdocs/[Project_name]/resources/views/welcome.blade.php) 意外と単純な理由ってことがわかる。データベースへの接続がうまくいってないみたい。 ひとまずターミナルでMySQLへの接続を試みてみる。 $ mysql -u root -p ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' まあそりゃ接続できないよね。 んでmysql.sockって何だ?と思ったけどどうやら英語で書いてある通りMac内のプログラムとMySQLを通信の処理をしてくれるいいやつらしい。 この仲介役みたいな人がいないからSQLに接続できないらしい。Macをシャットダウンしたときに解雇されたのか。かわいそうに。 だから以下のようにして新しく仲介役を雇用してやる必要があると。 $ touch /tmp/mysql.sock 備忘録: touch・・・現在のディレクトリにとりあえず空のファイルを作ってあげるコマンド。 ここで権限のエラーが出ることがある touch: /tmp/mysql.sock: Permission denied その場合は $ ls -l /tmp/mysql.sock で権限を確認してやり、 $ sudo chown [username]:admin /tmp/mysql.sock で[username]にパーミッションを与えてあげ、改めてtouchしてやる。 備忘録: sudo・・・rootユーザーの権限が必要なコマンドを実行できるようになる。 chown・・・指定したファイルの所有権を変更するコマンド。 これで仲介役が雇え、MySQLの接続準備が整ったので、MySQLを再起動する。 $ mysql.server restart ERROR! MySQL server PID file could not be found! Starting MySQL . SUCCESS! ここのエラーはよくわからないが、MySQLが無事再起動できたようなので改めてブラウザでLaravelを起動してみるとうまくいっていることが確認できた。 初めてこういうふうになった時はめちゃくちゃググりまくって時間がかなりかかってしまったのでそういった方々の役に立てれば、、、!!! まとめ Laravelにブラウザで接続できなくなった時はまず.envファイルのdebugをオンにしてどこで接続がうまくいってないか確認する。 mysql.sockでMySQL接続ができないよと言われたら多分mysql.sockが消えてるので、適切な権限のもと新しくmysql.sockを作成してあげる。 mysqlを再起動してうまくいっていることを確認する。 人生がうまくいく。 参考 https://qiita.com/jonakp/items/477a18d4a94c01a31583 https://www.naka-style-blog.com/mysql-log-in-erorr/ コマンドラインの操作だったり、それらに付随するエラーだったりってなかなかとっつきにくくて難しいのでまだまだ勉強が必要だなと思った今日この頃。何か気になる点やご指摘等ございましたら教えていただけるとありがたいです。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MySQL 8系のレプリケーションでAuthentication requires secure connectionになる問題を回避する

show slave status\G; をすると、 Authentication requires secure connection という注意文が表示される。 これを回避するためには、 CHANGE MASTER TO -> MASTER_HOST='master_hostname', -> MASTER_USER='replicate', -> MASTER_PASSWORD='password', -> MASTER_SSL=1; のように MASTER_SSL=1 を記述する必要がある。 あとはこれまで通り START SLAVE; した後に、SHOW SLAVE STATUS\G; して、 Slave_IO_Running が Yes になっていれば正常に動作しているはず。 詳しいことは公式ドキュメントを読むこと。 https://dev.mysql.com/doc/refman/8.0/ja/replication-solutions-encrypted-connections.html
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MySQL 8系のレプリケーションでAuthentication requires secure connectionになる問題をとりあえず回避する

すべてレプリカ側の記述。 ソース側の記述や操作は一切なし。 show slave status\G; をすると、 Authentication requires secure connection という注意文が表示される。 これを回避するためには、 CHANGE MASTER TO -> MASTER_HOST='master_hostname', -> MASTER_USER='replicate', -> MASTER_PASSWORD='password', -> MASTER_SSL=1; のようする。 肝は MASTER_SSL=1 を記述すること。 あとはこれまで通り START SLAVE; した後に、SHOW SLAVE STATUS\G; して、 Slave_IO_Running が Yes になっていれば正常に動作しているはず。 詳しいことは公式ドキュメントを読むこと。 https://dev.mysql.com/doc/refman/8.0/ja/replication-solutions-encrypted-connections.html ※キーのやり取りをしていないのでSSL通信が動いている訳ではないとは思うので、個人情報を扱うレプリケーションを行う際はしっかり公式ドキュメントを見て検証してください。詳しいことは知りません。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

PHPフルスクラッチでWebアプリ作成

はじめに マイペースに開発を進める予定です。 記事を書き次第、追記予定となります。 また、デザインは全くと言ってもいいほどつけないと思いますので、ご理解いただけると嬉しいです。 経緯 気ままにWebアプリをフルスクラッチで実装しようと思ったので始めました。 また、どうせならアウトプットしようと記事にし始めました。 (MarkDownの勉強もできるし…) どんなものを作るか 詳しくは決めていないがバイトのシフト管理アプリを作ろうと考えています。 店長が管理者となり、従業員がシフトを提出して店長がシフトを作成する的な… 開発環境 Ubuntu 20.04.3 LTS PHP 8.0 MySQL 8.0 Git ※今後随時更新予定 記事一覧 COMMING SOON...
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MySQL 備忘録

USE `house_work`; -- 家事履歴のテーブル DROP TABLE IF EXISTS `housework_history`; CREATE TABLE `housework_history` ( `history_id` int(5) NOT NULL AUTO_INCREMENT, `lasttime_worksdate` DATETIME DEFAULT CURRENT_TIMESTAMP, `flag_nexttimecomp` BIT(1) default 0, `works_id` int(5), `user_id` int(5), PRIMARY KEY (`history_id`), FOREIGN KEY works_id(`works_id`) REFERENCES housework_works(`works_id`), FOREIGN KEY user_id(`user_id`) REFERENCES housework_users(`user_id`) ) COLLATE utf8mb4_ja_0900_as_cs_ks; カラムの定義で現時刻をデフォルト設定する `列名`        型 デフォルト 現時刻, `lasttime_worksdate` DATETIME DEFAULT CURRENT_TIMESTAMP, FOREIGN KEY(外部キー制約)とは  外部キー インデックス名 列名 参照先 テーブル名 列名 FOREIGN KEY works_id(`works_id`) REFERENCES housework_works(`works_id`), FOREIGN KEY user_id(`user_id`) REFERENCES housework_users(`user_id`) →データを追加・更新する際、他テーブルの特定の列の値しか指定できないようにするもの。 JOIN →テーブルどうしを結合する際に使う命令。詳細後述。 SELECT A.lasttime_worksdate, C.category_name, B.housework_name, B.interval_day, DATE_ADD(A.lasttime_worksdate, INTERVAL(B.interval_day)DAY) AS nexttime_houosework, D.user_name FROM housework_history AS A INNER JOIN housework_works AS B ON A.works_id = B.works_id INNER JOIN housework_category AS C ON B.category_id = C.category_id INNER JOIN housework_users AS D ON A.user_id = D.user_id; 外部キーエラー FOREIGN KEY `category_name`(`category_name`) REFERENCES `housework_category`(`category_name`) エラー内容 原因 備考 Referencing column and referenced column in foreign key constraint are incompatible FOREIGN KEY側とREFERENCES側の指定したキーの型が違う。 【例】VARCHARとINT
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MySQL

MySQLとは ・表形式でデータを保存する。 ・MariaDBとは、MySQLと共通点の多いデータベース。 今最も勢いのあるDB。 DBの用語 ・テーブル:一つ一つの表 ・レコード:行 ・カラム:列 テーブルを作ろう 1.CREATE TABELE テーブル名(); ・テーブル名は、複数のレコードを管理するため、複数形にすることが多い。 ・丸括弧の中に定義したいカラム名を書く。 ・定義のときに、データ型を指定する。 2.DESC テーブル名; テーブルの構造を確認できる 3.SHOW テーブル名; テーブル一覧 レコードの挿入 ・DROP TABLE テーブル名; テーブルを削除。もしテーブルが存在していなかったらエラーになるため、「IF EXISTS」をつける と良い。 ・INSERT INTO テーブル名 VALUES(); レコードの挿入 データ型 整数 データ型の後ろにUNSIGNEDをつけると、マイナス分をプラスに持ってこれる。 少数 通常はDESIMAL 文字列 CHAR:固定長 VARCHAR:文字数がバラバラ TEXT:それより長くなるやつ ENUM 特定の文字列に限定して、そのうちの一つだけの値を格納したいときに使用。(セレクトボックスのイメージ) 1から始まるインデックス番号でも表現可能。 特定の文字列のうち複数の値ならSETを使う。 真偽値・日時 真偽:BOOL 日程:DATETIME NULLの扱い 何も値が入っていないと、基本的にNULL。 NULLのときにエラーにしたい場合は、カラムにNOT NULLとつける。 デフォルトを設定したい場合はDEFAULT 値に制限をつける カラム名の後ろにCHECK(条件式)をつけると、条件式通りでないとエラーにすることができる。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む