MySQL チートシート - HirokiYoshida837/ISUCON2022 GitHub Wiki
MySQL 環境確認
service確認
sudo systemctl status mysql
バージョン確認
mysql --version
mysqlログイン
mysql -h localhost -P 3306 -u isucon -pisucon isucondition
別サーバーからアクセスできるようにする
- 設定ファイルを探す (例 : /etc/mysql/mariadb.conf.d/50-server.cnf)
bind-address
を0.0.0.0
に設定し、sudo systemctl restart mysql.service
で設定を反映- mysqlのCUIに入って、外部接続用のユーザを作成し、権限付与
CREATE USER `isucon`@`%` IDENTIFIED BY 'isucon';
GRANT ALL PRIVILEGES ON `isucondition`.* TO `isucon`@`%`;
これでもアクセスできない場合は、外部からの3306アクセスが無効になっているかもしれない。以下で無効にする。(レギュレーション問題ないかはチェックしておく)
sudo ufw allow 3306
※firewallが無効になっていたら無視。
mysqlのログ確認
mysql restart時のログにエラーがでていることもあるので、設定変更したら一応確認
sudo journalctl -u mysql
mysqldのlog binを無効化する
disable-log-bin
confに書いても効かない場合は、systemdの起動オプションで入れる
mysql/mariaDBでgenerated Columnする
こんな感じで、 xxx AS (xxx) とすれば多分できる.
isuumo問題で、mariaDBのときにGeneratedColumnしようとしたら、 NOT NULL 成約をうまく追加できなかった。調査しておいたほうがいいかも。
popularity_desc INTEGER AS (-popularity),
`point` POINT AS (ST_GeomFromText(CONCAT("POINT(", latitude, " ", longitude, ")"), 4326)) STORED
popularity_desc INTEGER AS (-popularity) NOT NULL,
`point` POINT AS (POINT(latitude, longitude)) STORED NOT NULL
xxx GENERATED ALWAYS AS... としても生成できるみたい。
p geometry GENERATED ALWAYS AS (ST_GeomFromText(CONCAT("POINT(",latitude," ",longitude,")"),4326))
空間INDEX
空間Indexを使うときは、SRIDを指定しないとIndexがうまく効かないらしい。 デフォルトで4326になる、とかいう話をみかけたが指定しておいたほうがいいかもしれない。