- 投稿日:2019-10-21T23:50:44+09:00
CentOS 7にMySQL 8.0をインストール(SCL)
はじめに
Software Collection(SCL)を利用してCentOS7にMySQL8.0をインストール
親記事:MySQL, MariaDBの各種インストール方法とEOLまとめ - Qiita
参考:Quick Start — Software Collectionsサポート
本手法で導入した場合、Red Hat Software Collections Product Life Cycle - Red Hat Customer Portalより、2023-04がEOLだと思われる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。LOG
レポジトリ登録
# yum install -y centos-release-sclインストール
# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) # yum install -y rh-mysql80 # scl enable rh-mysql80 bash ... 略mysql起動/停止
# systemctl start rh-mysql80-mysqld # systemctl status rh-mysql80-mysqld ● rh-mysql80-mysqld.service - MySQL 8.0 database server Loaded: loaded (/usr/lib/systemd/system/rh-mysql80-mysqld.service; disabled; vendor preset: disabled) Active: active (running) since Mon 2019-10-21 14:48:30 UTC; 1s ago Process: 412 ExecStartPost=/usr/bin/scl enable $RH_MYSQL80_SCLS_ENABLED -- /opt/rh/rh-mysql80/root/usr/libexec/mysql-check-upgrade (code=exited, status=0/SUCCESS) Process: 280 ExecStartPre=/usr/bin/scl enable $RH_MYSQL80_SCLS_ENABLED -- /opt/rh/rh-mysql80/root/usr/libexec/mysql-prepare-db-dir %n (code=exited, status=0/SUCCESS) Process: 252 ExecStartPre=/usr/bin/scl enable $RH_MYSQL80_SCLS_ENABLED -- /opt/rh/rh-mysql80/root/usr/libexec/mysql-check-socket (code=exited, status=0/SUCCESS) Process: 246 ExecStartPre=/usr/bin/scl enable $RH_MYSQL80_SCLS_ENABLED -- /usr/bin/scl_enabled rh-mysql80 (code=exited, status=0/SUCCESS) Main PID: 367 (mysqld) Status: "Server is operational" CGroup: /docker/4c8c60bc999ed28314e7cae02bd0fc503fa4b803b08a98137ccb180e43246168/system.slice/rh-mysql80-mysqld.service mq367 /opt/rh/rh-mysql80/root/usr/libexec/mysqld --basedir=/opt/rh/rh-mysql80/root/usr ? 367 /opt/rh/rh-mysql80/root/usr/libexec/mysqld --basedir=/opt/rh/rh-mysql80/root/usr Oct 21 14:48:04 4c8c60bc999e systemd[1]: Starting MySQL 8.0 database server... Oct 21 14:48:05 4c8c60bc999e scl[280]: Initializing MySQL database Oct 21 14:48:30 4c8c60bc999e systemd[1]: Started MySQL 8.0 database server.# systemctl stop rh-mysql80-mysqld # systemctl status rh-mysql80-mysqld ● rh-mysql80-mysqld.service - MySQL 8.0 database server Loaded: loaded (/usr/lib/systemd/system/rh-mysql80-mysqld.service; disabled; vendor preset: disabled) Active: inactive (dead) Oct 21 14:48:04 4c8c60bc999e systemd[1]: Starting MySQL 8.0 database server... Oct 21 14:48:05 4c8c60bc999e scl[280]: Initializing MySQL database Oct 21 14:48:30 4c8c60bc999e systemd[1]: Started MySQL 8.0 database server. Oct 21 14:48:47 4c8c60bc999e systemd[1]: Stopping MySQL 8.0 database server... Oct 21 14:48:48 4c8c60bc999e systemd[1]: Stopped MySQL 8.0 database server.mysql自動起動設定/設定解除
# systemctl enable rh-mysql80-mysqld Created symlink from /etc/systemd/system/multi-user.target.wants/rh-mysql80-mysqld.service to /usr/lib/systemd/system/rh-mysql80-mysqld.service. # systemctl list-unit-files --type=service |grep mysql rh-mysql80-mysqld.service enabled rh-mysql80-mysqld@.service disabled# systemctl disable rh-mysql80-mysqld Removed symlink /etc/systemd/system/multi-user.target.wants/rh-mysql80-mysqld.service. # systemctl list-unit-files --type=service |grep mysql rh-mysql80-mysqld.service disabled rh-mysql80-mysqld@.service disabled各種確認
# systemctl start rh-mysql80-mysqld # mysql -u root -e 'select version();' +-----------+ | version() | +-----------+ | 8.0.17 | +-----------+
- 投稿日:2019-10-21T23:44:03+09:00
CentOS 7にMySQL 5.7をインストール(SCL)
はじめに
Software Collection(SCL)を利用してCentOS7にMySQL5.7をインストール
親記事:MySQL, MariaDBの各種インストール方法とEOLまとめ - Qiita
参考:Quick Start — Software Collectionsサポート
本手法で導入した場合、Red Hat Software Collections Product Life Cycle - Red Hat Customer Portalより、2019-11がEOLだと思われる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。LOG
レポジトリ登録
# yum install -y centos-release-sclインストール
# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) # yum install -y rh-mysql57 # scl enable rh-mysql57 bash ... 略mysql起動/停止
# systemctl start rh-mysql57-mysqld # systemctl status rh-mysql57-mysqld ● rh-mysql57-mysqld.service - MySQL 5.7 database server Loaded: loaded (/usr/lib/systemd/system/rh-mysql57-mysqld.service; disabled; vendor preset: disabled) Active: active (running) since Mon 2019-10-21 14:41:23 UTC; 2s ago Process: 374 ExecStartPost=/usr/bin/scl enable $RH_MYSQL57_SCLS_ENABLED -- /opt/rh/rh-mysql57/root/usr/libexec/mysql-check-upgrade (code=exited, status=0/SUCCESS) Process: 341 ExecStart=/opt/rh/rh-mysql57/root/usr/libexec/mysqld-scl-helper enable $RH_MYSQL57_SCLS_ENABLED -- /opt/rh/rh-mysql57/root/usr/libexec/mysqld --daemonize --basedir=/opt/rh/rh-mysql57/root/usr --pid-file=/var/run/rh-mysql57-mysqld/mysqld.pid (code=exited, status=0/SUCCESS) Process: 272 ExecStartPre=/usr/bin/scl enable $RH_MYSQL57_SCLS_ENABLED -- /opt/rh/rh-mysql57/root/usr/libexec/mysql-prepare-db-dir %n (code=exited, status=0/SUCCESS) Process: 244 ExecStartPre=/usr/bin/scl enable $RH_MYSQL57_SCLS_ENABLED -- /opt/rh/rh-mysql57/root/usr/libexec/mysql-check-socket (code=exited, status=0/SUCCESS) Process: 238 ExecStartPre=/usr/bin/scl enable $RH_MYSQL57_SCLS_ENABLED -- /usr/bin/scl_enabled rh-mysql57 (code=exited, status=0/SUCCESS) Main PID: 346 (mysqld) CGroup: /docker/9b923d2bfd11f4560910084714df4eaaf5cb9d71beed1f4e226ed570f9127ecd/system.slice/rh-mysql57-mysqld.service mq346 /opt/rh/rh-mysql57/root/usr/libexec/mysqld --daemonize --basedir=/opt/rh/rh-mysql57/root/u... ? 346 /opt/rh/rh-mysql57/root/usr/libexec/mysqld --daemonize --basedir=/opt/rh/rh-mysql57/root/u... Oct 21 14:41:13 9b923d2bfd11 systemd[1]: Starting MySQL 5.7 database server... Oct 21 14:41:13 9b923d2bfd11 scl[272]: Initializing MySQL database Oct 21 14:41:23 9b923d2bfd11 systemd[1]: Started MySQL 5.7 database server.# systemctl stop rh-mysql57-mysqld # systemctl status rh-mysql57-mysqld ● rh-mysql57-mysqld.service - MySQL 5.7 database server Loaded: loaded (/usr/lib/systemd/system/rh-mysql57-mysqld.service; disabled; vendor preset: disabled) Active: inactive (dead) Oct 21 14:41:13 9b923d2bfd11 systemd[1]: Starting MySQL 5.7 database server... Oct 21 14:41:13 9b923d2bfd11 scl[272]: Initializing MySQL database Oct 21 14:41:23 9b923d2bfd11 systemd[1]: Started MySQL 5.7 database server. Oct 21 14:41:47 9b923d2bfd11 systemd[1]: Stopping MySQL 5.7 database server... Oct 21 14:41:49 9b923d2bfd11 systemd[1]: Stopped MySQL 5.7 database server.mysql自動起動設定/設定解除
# systemctl enable rh-mysql57-mysqld Created symlink from /etc/systemd/system/multi-user.target.wants/rh-mysql57-mysqld.service to /usr/lib/systemd/system/rh-mysql57-mysqld.service. # systemctl list-unit-files --type=service |grep mysql rh-mysql57-mysqld.service enabled rh-mysql57-mysqld@.service disabled# systemctl disable rh-mysql57-mysqld Removed symlink /etc/systemd/system/multi-user.target.wants/rh-mysql57-mysqld.service. # systemctl list-unit-files --type=service |grep mysql rh-mysql57-mysqld.service disabled rh-mysql57-mysqld@.service disabled各種確認
# systemctl start rh-mysql57-mysqld # mysql -u root -e 'select version();' +-----------+ | version() | +-----------+ | 5.7.24 | +-----------+
- 投稿日:2019-10-21T23:37:43+09:00
CentOS 7にMySQL 5.6をインストール(SCL)
はじめに
Software Collection(SCL)を利用してCentOS7にMySQL5.6をインストール
親記事:MySQL, MariaDBの各種インストール方法とEOLまとめ - Qiita
参考:Quick Start — Software Collectionsサポート
本手法で導入した場合、Red Hat Software Collections Product Life Cycle - Red Hat Customer Portalより、2018-04がEOLだと思われる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。LOG
レポジトリ登録
# yum install -y centos-release-sclインストール
# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) # yum install -y rh-mysql56 # scl enable rh-mysql56 bash ... 略mysql起動/停止
# systemctl start rh-mysql56-mysqld # systemctl status rh-mysql56-mysqld ● rh-mysql56-mysqld.service - MySQL 5.6 database server Loaded: loaded (/usr/lib/systemd/system/rh-mysql56-mysqld.service; disabled; vendor preset: disabled) Active: active (running) since Mon 2019-10-21 14:34:30 UTC; 2s ago Process: 580 ExecStartPost=/usr/bin/scl enable $RH_MYSQL56_SCLS_ENABLED -- /opt/rh/rh-mysql56/root/usr/libexec/mysql-check-upgrade (code=exited, status=0/SUCCESS) Process: 374 ExecStartPost=/usr/bin/scl enable $RH_MYSQL56_SCLS_ENABLED -- /opt/rh/rh-mysql56/root/usr/libexec/mysql-wait-ready $MAINPID (code=exited, status=0/SUCCESS) Process: 272 ExecStartPre=/usr/bin/scl enable $RH_MYSQL56_SCLS_ENABLED -- /opt/rh/rh-mysql56/root/usr/libexec/mysql-prepare-db-dir %n (code=exited, status=0/SUCCESS) Process: 246 ExecStartPre=/usr/bin/scl enable $RH_MYSQL56_SCLS_ENABLED -- /opt/rh/rh-mysql56/root/usr/libexec/mysql-check-socket (code=exited, status=0/SUCCESS) Process: 240 ExecStartPre=/usr/bin/scl enable $RH_MYSQL56_SCLS_ENABLED -- /usr/bin/scl_enabled rh-mysql56 (code=exited, status=0/SUCCESS) Main PID: 373 (mysqld_safe) CGroup: /docker/6bac11ce5afc7a46c22715a36c911135968027fb1d240ea678b59ac03a34e7fd/system.slice/rh-mysql56-mysqld.service tq373 /bin/sh /opt/rh/rh-mysql56/root/usr/bin/mysqld_safe --basedir=/opt/rh/rh-mysql56/root/usr mq548 /opt/rh/rh-mysql56/root/usr/libexec/mysqld --basedir=/opt/rh/rh-mysql56/root/usr --datadir... ? 373 /bin/sh /opt/rh/rh-mysql56/root/usr/bin/mysqld_safe --basedir=/opt/rh/rh-mysql56/root/usr Oct 21 14:34:27 6bac11ce5afc scl[272]: Note: new default config file not created. Oct 21 14:34:27 6bac11ce5afc scl[272]: Please make sure your config file is current Oct 21 14:34:27 6bac11ce5afc scl[272]: WARNING: Default config file /etc/opt/rh/rh-mysql56/my.cnf exis...ystem Oct 21 14:34:27 6bac11ce5afc scl[272]: This file will be read by default by the MySQL server Oct 21 14:34:27 6bac11ce5afc scl[272]: If you do not want to use this, either remove it, or use the Oct 21 14:34:27 6bac11ce5afc scl[272]: --defaults-file argument to mysqld_safe when starting the server Oct 21 14:34:27 6bac11ce5afc su[365]: (to mysql) root on none Oct 21 14:34:28 6bac11ce5afc mysqld_safe-scl-helper[373]: 191021 14:34:28 mysqld_safe Logging to '/var/o...g'. Oct 21 14:34:28 6bac11ce5afc mysqld_safe-scl-helper[373]: 191021 14:34:28 mysqld_safe Starting mysqld da...sql Oct 21 14:34:30 6bac11ce5afc systemd[1]: Started MySQL 5.6 database server. Hint: Some lines were ellipsized, use -l to show in full.# systemctl stop rh-mysql56-mysqld # systemctl status rh-mysql56-mysqld ● rh-mysql56-mysqld.service - MySQL 5.6 database server Loaded: loaded (/usr/lib/systemd/system/rh-mysql56-mysqld.service; disabled; vendor preset: disabled) Active: inactive (dead) Oct 21 14:34:27 6bac11ce5afc scl[272]: WARNING: Default config file /etc/opt/rh/rh-mysql56/my.cnf exis...ystem Oct 21 14:34:27 6bac11ce5afc scl[272]: This file will be read by default by the MySQL server Oct 21 14:34:27 6bac11ce5afc scl[272]: If you do not want to use this, either remove it, or use the Oct 21 14:34:27 6bac11ce5afc scl[272]: --defaults-file argument to mysqld_safe when starting the server Oct 21 14:34:27 6bac11ce5afc su[365]: (to mysql) root on none Oct 21 14:34:28 6bac11ce5afc mysqld_safe-scl-helper[373]: 191021 14:34:28 mysqld_safe Logging to '/var/o...g'. Oct 21 14:34:28 6bac11ce5afc mysqld_safe-scl-helper[373]: 191021 14:34:28 mysqld_safe Starting mysqld da...sql Oct 21 14:34:30 6bac11ce5afc systemd[1]: Started MySQL 5.6 database server. Oct 21 14:35:01 6bac11ce5afc systemd[1]: Stopping MySQL 5.6 database server... Oct 21 14:35:03 6bac11ce5afc systemd[1]: Stopped MySQL 5.6 database server. Hint: Some lines were ellipsized, use -l to show in full.mysql自動起動設定/設定解除
# systemctl enable rh-mysql56-mysqld Created symlink from /etc/systemd/system/multi-user.target.wants/rh-mysql56-mysqld.service to /usr/lib/systemd/system/rh-mysql56-mysqld.service. # systemctl list-unit-files --type=service |grep mysql rh-mysql56-mysqld.service enabled# systemctl disable rh-mysql56-mysqld Removed symlink /etc/systemd/system/multi-user.target.wants/rh-mysql56-mysqld.service. # systemctl list-unit-files --type=service |grep mysql rh-mysql56-mysqld.service disabled各種確認
# systemctl start rh-mysql56-mysqld # mysql -u root -e 'select version();' +-----------+ | version() | +-----------+ | 5.6.40 | +-----------+
- 投稿日:2019-10-21T23:29:14+09:00
メモ
Laradock を使って nginx, Laravel, PHP, MySQL, phpMyAdmin のdocker環境を構築
- ドキュメント 2.2 Installation A.2 の条件に書いてあるコマンドを実行してもmysqlのコンテナが落ちて動かない...
- MySQLのバージョンが8以上だと MySQLサーバー側で使われる認証方式がLaravel側でサポートされていないため認証に失敗する
- ~/laradock/.env の MYSQL_VERSION を latest から 5.7.28 に変更
- パスの指定がデフォルトの状態だとファイルが生成されてない
- ~/laradock/.env の DATA_PATH_HOST を ~/.laradock/data から .laradock/data に変更
- ~/laradock/.env の設定内容
- APP_CODE_PATH_HOST=../laravel/
- DATA_PATH_HOST=.laradock/data
- MYSQL_VERSION=5.7.28
- MYSQL_DATABASE=laravel
- MYSQL_USER=laravel
- MYSQL_PASSWORD=laravel
- MYSQL_PORT=3306
- MYSQL_ROOT_PASSWORD=root
ディレクトリ
project
├── laradock/ (<- git clone https://github.com/laradock/laradock.git)
└── laravel/ターミナルからlaradockディレクトリに移動して docker-compose up -d nginx mysql phpmyadmin workspace のコマンド(20分位かかる)を実行したあと docker-compose exec --user=laradock workspace bash コマンドで workspace に入って laravelをインストール composer config -g repositories.packagist composer https://packagist.jp && composer global require hirak/prestissimo && composer create-project laravel/laravel .
- 投稿日:2019-10-21T23:23:02+09:00
CentOS 7にMySQL 5.5をインストール(SCL)
はじめに
Software Collection(SCL)を利用してCentOS7にMySQL5.5をインストール
親記事:MySQL, MariaDBの各種インストール方法とEOLまとめ - Qiita
参考:Quick Start — Software Collectionsサポート
本手法で導入した場合、Red Hat Software Collections Product Life Cycle - Red Hat Customer Portalより、2016-10がEOLだと思われる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。LOG
レポジトリ登録
# yum install -y centos-release-sclインストール
# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) # yum install -y mysql55 # scl enable mysql55 bash ... 略mysql起動/停止
# systemctl start mysql55-mysqld # systemctl status mysql55-mysqld ● mysql55-mysqld.service - MySQL database server Loaded: loaded (/usr/lib/systemd/system/mysql55-mysqld.service; disabled; vendor preset: disabled) Active: active (running) since Mon 2019-10-21 14:18:44 UTC; 17s ago Process: 303 ExecStartPost=/usr/bin/scl enable $MYSQL55_SCLS_ENABLED -- /opt/rh/mysql55/root/usr/libexec/mysqld-wait-ready $MAINPID (code=exited, status=0/SUCCESS) Process: 222 ExecStartPre=/usr/bin/scl enable $MYSQL55_SCLS_ENABLED -- /opt/rh/mysql55/root/usr/libexec/mysqld-prepare-db-dir %n (code=exited, status=0/SUCCESS) Process: 216 ExecStartPre=/usr/bin/scl enable $MYSQL55_SCLS_ENABLED -- /usr/bin/scl_enabled mysql55 (code=exited, status=0/SUCCESS) Main PID: 302 (scl) CGroup: /docker/6a76f167ea16b9cf0c4d2c3e6fc0758f58b60d71ed0611a8ab939779aa5d5880/system.slice/mysql55-mysqld.service tq302 /usr/bin/scl enable mysql55 -- /opt/rh/mysql55/root/usr/bin/mysqld_safe --basedir=/opt/rh/... tq304 /bin/bash /var/tmp/sclXTIRtH tq311 /bin/sh /opt/rh/mysql55/root/usr/bin/mysqld_safe --basedir=/opt/rh/mysql55/root/usr mq490 /opt/rh/mysql55/root/usr/libexec/mysqld --basedir=/opt/rh/mysql55/root/usr --datadir=/opt/... ? 302 /usr/bin/scl enable mysql55 -- /opt/rh/mysql55/root/usr/bin/mysqld_safe --basedir=/opt/rh/... Oct 21 14:18:38 6a76f167ea16 scl[222]: strongly recommended for production servers. Oct 21 14:18:38 6a76f167ea16 scl[222]: See the manual for more instructions. Oct 21 14:18:38 6a76f167ea16 scl[222]: You can start the MySQL daemon with: Oct 21 14:18:38 6a76f167ea16 scl[222]: systemctl start mysql55-mysqld Oct 21 14:18:38 6a76f167ea16 scl[222]: You can test the MySQL daemon with mysql-test-run.pl Oct 21 14:18:38 6a76f167ea16 scl[222]: after installing mysql55-mysql-test package. Oct 21 14:18:38 6a76f167ea16 scl[222]: See /opt/rh/mysql55/root/usr/share/mysql-test/README for instructions. Oct 21 14:18:39 6a76f167ea16 scl[302]: 191021 14:18:39 mysqld_safe Logging to '/var/log/mysql55-mysqld.log'. Oct 21 14:18:39 6a76f167ea16 scl[302]: 191021 14:18:39 mysqld_safe Starting mysqld daemon with databas...mysql Oct 21 14:18:44 6a76f167ea16 systemd[1]: Started MySQL database server. Hint: Some lines were ellipsized, use -l to show in full.# systemctl stop mysql55-mysqld # systemctl status mysql55-mysqld ● mysql55-mysqld.service - MySQL database server Loaded: loaded (/usr/lib/systemd/system/mysql55-mysqld.service; disabled; vendor preset: disabled) Active: inactive (dead) Oct 21 14:18:38 6a76f167ea16 scl[222]: You can start the MySQL daemon with: Oct 21 14:18:38 6a76f167ea16 scl[222]: systemctl start mysql55-mysqld Oct 21 14:18:38 6a76f167ea16 scl[222]: You can test the MySQL daemon with mysql-test-run.pl Oct 21 14:18:38 6a76f167ea16 scl[222]: after installing mysql55-mysql-test package. Oct 21 14:18:38 6a76f167ea16 scl[222]: See /opt/rh/mysql55/root/usr/share/mysql-test/README for instructions. Oct 21 14:18:39 6a76f167ea16 scl[302]: 191021 14:18:39 mysqld_safe Logging to '/var/log/mysql55-mysqld.log'. Oct 21 14:18:39 6a76f167ea16 scl[302]: 191021 14:18:39 mysqld_safe Starting mysqld daemon with databas...mysql Oct 21 14:18:44 6a76f167ea16 systemd[1]: Started MySQL database server. Oct 21 14:19:32 6a76f167ea16 systemd[1]: Stopping MySQL database server... Oct 21 14:19:33 6a76f167ea16 systemd[1]: Stopped MySQL database server. Hint: Some lines were ellipsized, use -l to show in full.mysql自動起動設定/設定解除
# systemctl enable mysql55-mysqld Created symlink from /etc/systemd/system/multi-user.target.wants/mysql55-mysqld.service to /usr/lib/systemd/system/mysql55-mysqld.service. # systemctl list-unit-files --type=service |grep mysql mysql55-mysqld.service enabled# systemctl disable mysql55-mysqld Removed symlink /etc/systemd/system/multi-user.target.wants/mysql55-mysqld.service. # systemctl list-unit-files --type=service |grep mysql mysql55-mysqld.service disabled各種確認
# systemctl start mysql55-mysqld # mysql -u root -e'select version();' +-----------+ | version() | +-----------+ | 5.5.52 | +-----------+
- 投稿日:2019-10-21T22:50:45+09:00
Docker+Rails+Mysqlでサーバー起動まで
はじめに
Dockerを使って開発演習が出来たことに感動したので、その嬉しさの勢いと、アウトプットとして書きます。また、Dockerの仕組みが分からなくても、以下に従っていけば、とりあえず構築できます。
環境
- Docker for Windows
- VScode
- Windows10 Pro
- Mysql
Windowsを使ってますが、基本的にmacの方も、DockerとMysqlがインストールされていれば大丈夫です。
Dockerがインストールされているかの確認
docker --version Docker version 18.09.1, build 4c52b90Dockerの起動
デスクトップにあるクジラのアイコンをクリックすると、起動します。右下のバーにクジラアイコンがあれば、Dockerが起動しています。
Railsアプリ用のディレクトリを作成
例えば現在のディレクトリがrailsというディレクトリだとします。
$ pwd /railsそして、これから作成するアプリ用のディレクトリを以下のように作り、そこに移動します。ここでは、ディレクトリ名をdocker_sample_appとします。
$ mkdir docker_sample_app $ cd docker_sample_app $ pwd /rails/docker_sample_appDockerファイルなどの準備
以下の4つのファイルを作成してください。
$ touch docker-compose.yml Dockerfile Gemfile Gemfile.lockそして、VScode内でファイルを変更していきます。
docker-compose.ymlversion: '3' services: db: image: mysql:5.7 ports: - "3306:3306" restart: always environment: - MYSQL_DATABASE=app_name_db - MYSQL_ROOT_PASSWORD=password volumes: - ./data:/var/lib/mysql:rw command: --innodb_use_native_aio=0 web: build: . command: bundle exec rails s -p 3000 -b '0.0.0.0' volumes: - .:/app_name ports: - "3000:3000" depends_on: - db environment: DB_HOST: dbDockerfile.FROM ruby:2.5.3 ENV LANG C.UTF-8 RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs RUN gem install bundler WORKDIR /tmp ADD Gemfile Gemfile ADD Gemfile.lock Gemfile.lock RUN bundle install ENV APP_HOME /app_name RUN mkdir -p $APP_HOME WORKDIR $APP_HOME ADD . $APP_HOMEdocker-compose.ymlは上から9, 18行目のapp_nameを、Docker.fileは下から4行目の箇所を、先ほど作成したディレクトリ名に変えてください。(ここではdocker_sample_app)
docker-compose.yml内にportが二つあります。db側はmysql workbenchからアクセスするためのポートで、web側はブラウザでlocalhostでアクセスするためのものです。
正直workbenchは今回のサーバ起動までという目的には含まれてないので、気にしなくて大丈夫です。Gemfile.source 'https://rubygems.org' gem 'rails'Gemfile.lockは空で問題ないです。
Railsアプリの作成
ターミナルで、このコマンドをうってください。
$ docker-compose run web rails new . -d mysql --skip-bundle途中で
Overwrite /docker_sample_app/Gemfile? (enter "h" for help) [Ynaqdhm]と聞かれます。そこは、「y」とタイプしてください。 すると、ディレクトリ内にrails newした時と同じようなファイルが作成されているのが分かると思います。 次に、プロジェクトをビルドします。
$ docker-compose buildこのコマンドでDockerfileの内容が実行されます。 おめでとうございます。あと、もうすこしです。
サーバーを立ち上げる
以下のコマンドをうつことで、サーバーを立ち上げれます。
$ docker-compose up -dこの状態でブラウザに行って、localhostにアクセスしようとすると、
Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2 "No such file or directory")といったエラーが出ると思います。これは、まだdatabaseファイルを設定していないからです。なので、変更してあげます。
database.ymldefault: &default adapter: mysql2 encoding: utf8 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root password: password host: <%= ENV['DB_HOST'] %> development: <<: *default database: app_name_development test: <<: *default database: app_name_test今回は、本番環境を用意する必要ではないので、Productionは消しました。先ほどと同じように、app_nameをディレクトリ名(docker_sample_app_developmentのように)に変更してください。
そしたら、データベースファイルをいじったので、サーバーを再起動します。
$ docker-compose down $ docker-compose up -dそして、ブラウザをリロードすると、違うエラーが出ます。
Unknown database 'app_name_development'これは、「データベースを作成してください」というエラーなので、言われるがままにデータベースを作りましょう。
docker-compose exec web rails db:createブラウザに戻ってください。localhost:3000にアクセスすると無事、例の画面が出るはずです!!!
これで今回の目標は達成されました!
docker-composeのコマンドについて
rails c, rails db:createなどのコマンドがありますが、docker-composeを使うときは、以下のコマンドを必ずその前に付けなければなりません。
docker-compose exec webなので、例えば、データベースを作りたい時は
docker-compose exec web rails db:createとなります!
ちなみにrails sコマンドは使いません。
docker-compose up -dでサーバが起動するからです。[番外編]
ルーティングファイルなどを変更したらサーバーを再起動させますが、viewsファイルに関しては変更してもサーバの再起動は、必要ないのですが、反映されないことが分かりました。その場合は、development.rbファイルを変更する必要があることが分かりました。
development.rbconfig.file_watcher = ActiveSupport::EventedFileUpdateCheckerのEventedFileUpdateCheckerのところをFileUpdateCheckerに変更します。
development.rbconfig.file_watcher = ActiveSupport::FileUpdateChecker参考にさせていただいた記事
- 投稿日:2019-10-21T22:50:45+09:00
docker-compose+Rails+Mysqlでサーバー起動まで
はじめに
Dockerを使って開発演習が出来たことに感動したので、その嬉しさの勢いと、アウトプットとして書きます。また、Dockerの仕組みが分からなくても、以下に従っていけば、とりあえず構築できます。
環境
- Docker for Windows
- VScode
- Windows10 Pro
- Mysql
Windowsを使ってますが、基本的にmacの方も、DockerとMysqlがインストールされていれば大丈夫です。
Dockerがインストールされているかの確認
docker --version Docker version 18.09.1, build 4c52b90Dockerの起動
デスクトップにあるクジラのアイコンをクリックすると、起動します。右下のバーにクジラアイコンがあれば、Dockerが起動しています。
Railsアプリ用のディレクトリを作成
例えば現在のディレクトリがrailsというディレクトリだとします。
$ pwd /railsそして、これから作成するアプリ用のディレクトリを以下のように作り、そこに移動します。ここでは、ディレクトリ名をdocker_sample_appとします。
$ mkdir docker_sample_app $ cd docker_sample_app $ pwd /rails/docker_sample_appDockerファイルなどの準備
以下の4つのファイルを作成してください。
$ touch docker-compose.yml Dockerfile Gemfile Gemfile.lockそして、VScode内でファイルを変更していきます。
docker-compose.ymlversion: '3' services: db: image: mysql:5.7 ports: - "3306:3306" restart: always environment: - MYSQL_DATABASE=app_name_db - MYSQL_ROOT_PASSWORD=password volumes: - ./data:/var/lib/mysql:rw command: --innodb_use_native_aio=0 web: build: . command: bundle exec rails s -p 3000 -b '0.0.0.0' volumes: - .:/app_name ports: - "3000:3000" depends_on: - db environment: DB_HOST: dbDockerfile.FROM ruby:2.5.3 ENV LANG C.UTF-8 RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs RUN gem install bundler WORKDIR /tmp ADD Gemfile Gemfile ADD Gemfile.lock Gemfile.lock RUN bundle install ENV APP_HOME /app_name RUN mkdir -p $APP_HOME WORKDIR $APP_HOME ADD . $APP_HOMEdocker-compose.ymlは上から9, 18行目のapp_nameを、Docker.fileは下から4行目の箇所を、先ほど作成したディレクトリ名に変えてください。(ここではdocker_sample_app)
docker-compose.yml内にportが二つあります。db側はmysql workbenchからアクセスするためのポートで、web側はブラウザでlocalhostでアクセスするためのものです。
正直workbenchは今回のサーバ起動までという目的には含まれてないので、気にしなくて大丈夫です。Gemfile.source 'https://rubygems.org' gem 'rails'Gemfile.lockは空で問題ないです。
Railsアプリの作成
ターミナルで、このコマンドをうってください。
$ docker-compose run web rails new . -d mysql --skip-bundle途中で
Overwrite /docker_sample_app/Gemfile? (enter "h" for help) [Ynaqdhm]と聞かれます。そこは、「y」とタイプしてください。 すると、ディレクトリ内にrails newした時と同じようなファイルが作成されているのが分かると思います。 次に、プロジェクトをビルドします。
$ docker-compose buildこのコマンドでDockerfileの内容が実行されます。 おめでとうございます。あと、もうすこしです。
サーバーを立ち上げる
以下のコマンドをうつことで、サーバーを立ち上げれます。
$ docker-compose up -dこの状態でブラウザに行って、localhostにアクセスしようとすると、
Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2 "No such file or directory")といったエラーが出ると思います。これは、まだdatabaseファイルを設定していないからです。なので、変更してあげます。
database.ymldefault: &default adapter: mysql2 encoding: utf8 pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %> username: root password: password host: <%= ENV['DB_HOST'] %> development: <<: *default database: app_name_development test: <<: *default database: app_name_test今回は、本番環境を用意する必要ではないので、Productionは消しました。先ほどと同じように、app_nameをディレクトリ名(docker_sample_app_developmentのように)に変更してください。
そしたら、データベースファイルをいじったので、サーバーを再起動します。
$ docker-compose down $ docker-compose up -dそして、ブラウザをリロードすると、違うエラーが出ます。
Unknown database 'app_name_development'これは、「データベースを作成してください」というエラーなので、言われるがままにデータベースを作りましょう。
docker-compose exec web rails db:createブラウザに戻ってください。localhost:3000にアクセスすると無事、例の画面が出るはずです!!!
これで今回の目標は達成されました!
docker-composeのコマンドについて
rails c, rails db:createなどのコマンドがありますが、docker-composeを使うときは、以下のコマンドを必ずその前に付けなければなりません。
docker-compose exec webなので、例えば、データベースを作りたい時は
docker-compose exec web rails db:createとなります!
ちなみにrails sコマンドは使いません。
docker-compose up -dでサーバが起動するからです。[番外編]
ルーティングファイルなどを変更したらサーバーを再起動させますが、viewsファイルに関しては変更してもサーバの再起動は、必要ないのですが、反映されないことが分かりました。その場合は、development.rbファイルを変更する必要があることが分かりました。
development.rbconfig.file_watcher = ActiveSupport::EventedFileUpdateCheckerのEventedFileUpdateCheckerのところをFileUpdateCheckerに変更します。
development.rbconfig.file_watcher = ActiveSupport::FileUpdateChecker参考にさせていただいた記事
- 投稿日:2019-10-21T22:50:04+09:00
CentOS 6にMySQL 5.7をインストール(SCL)
はじめに
Software Collection(SCL)を利用してCentOS6にMySQL5.7をインストール
親記事:MySQL, MariaDBの各種インストール方法とEOLまとめ - Qiita
参考:Quick Start — Software Collectionsサポート
本手法で導入した場合、Red Hat Software Collections Product Life Cycle - Red Hat Customer Portalより、2019-11がEOLだと思われる。
それ以降に報告された脆弱性や不具合への対応は実施されない可能性がある。LOG
レポジトリ登録
# yum install -y centos-release-sclインストール
cat /etc/redhat-release CentOS release 6.10 (Final) # yum install -y rh-mysql57 # scl enable rh-mysql57 bash ... 略mysql起動/停止
# service rh-mysql57-mysqld start Initializing MySQL database Starting rh-mysql57-mysqld: [ OK ] # service rh-mysql57-mysqld status rh-mysql57-mysqld (pid 548) is running...# service rh-mysql57-mysqld stop Stopping rh-mysql57-mysqld: [ OK ] # service rh-mysql57-mysqld status rh-mysql57-mysqld is stoppedmysql自動起動設定/設定解除
# chkconfig rh-mysql57-mysqld on # chkconfig --list rh-mysql57-mysqld rh-mysql57-mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off# chkconfig rh-mysql57-mysqld off # chkconfig --list rh-mysql57-mysqld rh-mysql57-mysqld 0:off 1:off 2:off 3:off 4:off 5:off 6:off各種確認
# service rh-mysql57-mysqld start Starting rh-mysql57-mysqld: [ OK ] # mysql -u root -e'select version();' +-----------+ | version() | +-----------+ | 5.7.24 | +-----------+
- 投稿日:2019-10-21T22:25:17+09:00
CentOS 6にMySQL 5.1をインストール(OS標準)
はじめに
CentOS6にMySQLを標準インストール
親記事:MySQL, MariaDBの各種インストール方法とEOLまとめ - QiitaLOG
インストール
cat /etc/redhat-release CentOS release 6.10 (Final) # yum install -y mysql-server ... 略mysql起動/停止
初回起動時には初期設定関係のメッセージが表示される。
# service mysqld start Initializing MySQL database: Installing MySQL system tables... OK Filling help tables... OK To start mysqld at boot time you have to copy support-files/mysql.server to the right place for your system PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER ! To do so, start the server, then issue the following commands: /usr/bin/mysqladmin -u root password 'new-password' /usr/bin/mysqladmin -u root -h 57db8f7c1234 password 'new-password' Alternatively you can run: /usr/bin/mysql_secure_installation which will also give you the option of removing the test databases and anonymous user created by default. This is strongly recommended for production servers. See the manual for more instructions. You can start the MySQL daemon with: cd /usr ; /usr/bin/mysqld_safe & You can test the MySQL daemon with mysql-test-run.pl cd /usr/mysql-test ; perl mysql-test-run.pl Please report any problems with the /usr/bin/mysqlbug script! [ OK ] Starting mysqld: [ OK ] # service mysqld status mysqld (pid 284) is running...# service mysqld stop Stopping mysqld: [ OK ] # service mysqld status mysqld is stoppedmysql自動起動設定/設定解除
# chkconfig mysqld on # chkconfig --list mysqld mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off# chkconfig mysqld off # chkconfig --list mysqld mysqld 0:off 1:off 2:off 3:off 4:off 5:off 6:off各種確認
# service mysqld start Starting mysqld: [ OK ] # mysql -u root -e'select version();' +-----------+ | version() | +-----------+ | 5.1.73 | +-----------+
- 投稿日:2019-10-21T22:12:15+09:00
MySQL, MariaDBの各種インストール方法とEOLまとめ
はじめに
MySQL, mariaDBの各種インストール方法とそれぞれのEOLを纏めてみます。
EOLは無償でパッチ提供が継続されるであろう期日とし、各提供者が定義している個別のサポート名称や内容をあまり考慮していません。サマリ
導入方法 OS DB EOL 参考 OS標準 CentOS6 MySQL5.1 2017-05-10 1 2 OS標準 CentOS7 MariaDB5.5 2020-11-30 1 2 SCL CentOS6,7 MySQL5.5 2016-10 3 SCL CentOS6,7 MySQL5.6 2018-04 3 SCL CentOS6,7 MySQL5.7 2019-11 3 SCL CentOS7 MySQL8.0 2023-04 3 SCL CentOS6,7 MariaDB5.5 2016-10 3 SCL CentOS6,7 MariaDB10.0 2018-04 3 SCL CentOS6,7 MariaDB10.1 2019-05 3 SCL CentOS6,7 MariaDB10.2 2020-10 3 SCL CentOS6,7 MariaDB10.3 2023-06 3 AppStream CentOS8 MySQL8.0 2023-04 4 5 AppStream CentOS8 MariaDB10.3 2023-05 4 5 OS標準 Debian8 2020-06-30 6 OS標準 Debian9 2022-xx-xx 6 OS標準 Debian10 202x-xx-xx 6 OS標準 Ubuntu14.04 2019-04 7 OS標準 Ubuntu16.04 2021-04 7 OS標準 Ubuntu18.04 2023-04 7 その他 - MySQL5.0 2011-12 8 9 その他 - MySQL5.1 2013-12 8 9 その他 - MySQL5.5 2018-12 8 9 その他 - MySQL5.6 2021-02 8 9 その他 - MySQL5.7 2023-10 8 9 その他 - MySQL8.0 2026-04 8 9 各種導入方法
OS標準
- CentOS
- Debian
- Ubuntu
CentOS + Software Collections(SCL)
- CentOS6
- CentOS7
CentOS + Application Stream(AppStream)
- CentOS8
Official Repository
- CentOS
- Debian
- Ubuntu
- 投稿日:2019-10-21T17:58:20+09:00
【Java】MySQLに接続する
概要
MySQL : 5.7
Java : 8.1
Mac
Eclipse始める前に以下条件をクリアしている
・MySQLで既にtableなどができている。
・ターミナルなどで難なく接続できているJDBCをダウンロード
MySQLのJDBCをダウンロード
https://dev.mysql.com/downloads/connector/j/「Platform Independent (Architecture Independent), Compressed TAR Archive」 をダウンロード
解凍したファイルに
mysql-connector-java-5.1.48-bin.jar
があるから、
Tomcatの/Tomcat/lib
に入れる
(私の場合、/Users/namari/apache-tomcat-9.0.27/lib
)接続してみる
プロジェクトの中に、
SqlTest.java
を適当に作ってみる。SqlTest.javapackage chapter14; import java.io.*; import java.sql.*; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.*; /** * Servlet implementation class SqlTest */ @WebServlet("/SqlTest") public class SqlTest extends HttpServlet { private static final long serialVersionUID = 1L; protected void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException { // 今回は、localhostにあるbook のデータベース String url = "jdbc:mysql://localhost/book"; try{ Class.forName("com.mysql.jdbc.Driver"); Connection conn = DriverManager.getConnection(url, "ユーザー名", "パスワード"); // データベースに対する処理 msg = "ok"; } catch (SQLException | ClassNotFoundException e){ msg = "NG"; } response.getWriter().println(msg); } }
- 投稿日:2019-10-21T15:39:19+09:00
MySQLの既存テーブルをDjangoで扱うときのメモ
1.準備
まずはsettings.pyにMySQLの接続先情報を記述します。
settings.pyimport pymysql pymysql.install_as_MySQLdb() DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': '###db', # データベース名 'USER': 'root', # ユーザ名 'PASSWORD': 'password', # パスワード 'HOST': '127.0.0.1', # MariaDBがあるサーバのIPアドレスやホストを。空欄はローカルホスト 'PORT': '3306', # 空欄はデフォルトポートの3306 } }MySQLを扱うモジュールが必要なため、PYMYSQLをインストールしてきます。
pip install PyMySQL2.マイグレートしていく
Models.pyに記載するモデル定義情報を自動で生成
下記コマンドで既存テーブルのモデル定義を自動で作ります。
python manage.py inspectdb table テーブル名
> python manage.py inspectdb table テーブル名 # This is an auto-generated Django model module. # You'll have to do the following manually to clean this up: # * Rearrange models' order # * Make sure each model has one field with primary_key=True # * Make sure each ForeignKey has `on_delete` set to the desired behavior. # * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table # Feel free to rename the models, but don't rename db_table values or field names. from django.db import models # Unable to inspect table 'table' # The error was: (1146, "Table '##db.table' doesn't exist") class Usertable(models.Model): id = models.BigIntegerField(unique=True, blank=True, null=True) name = models.CharField(max_length=50, blank=True, null=True) screen_name = models.TextField(blank=True, null=True) description = models.TextField(blank=True, null=True) profile_image_url = models.TextField(blank=True, null=True) follow_count = models.IntegerField(blank=True, null=True) followers_count = models.IntegerField(blank=True, null=True) tweet_count = models.IntegerField(blank=True, null=True) video_count = models.IntegerField(blank=True, null=True) video_count_date = models.BigIntegerField(blank=True, null=True) image_count = models.IntegerField(blank=True, null=True) image_count_date = models.BigIntegerField(blank=True, null=True) twitter_created_at = models.DateTimeField() created_at = models.DateTimeField() updated_at = models.DateTimeField() class Meta: managed = False db_table = 'usertable'出力された情報はプロジェクトの
models.py
にコピー&ペーストにしましょう。
ちなみに上記コマンドを事項した際にエラーらしきものが確認できる。
# The error was: (1146, "Table '##db.table' doesn't exist")
これは何なのか、正直わからないw教えていただきたい。マイグレートしたらエラーでた('id' can only be used as a field name if the field also sets 'primary_key=True')
> python manage.py migrate SystemCheckError: System check identified some issues: ERRORS: hello.Usertable: (models.E004) 'id' can only be used as a field name if the field also sets 'primary_key=True'.翻訳したらわかるように
'id'は、フィールドに 'primary_key = True'も設定されている場合にのみフィールド名として使用できます。
既存テーブルにidカラムがある場合は制限があるようです。先ほどのmodels.pyのidの定義を下記に変更しました。
id = models.BigIntegerField(unique=True, blank=True, null=True, primary_key=True)
再度実行してみます。
またエラー。。。null=Teueはいらないようです。> python manage.py migrate SystemCheckError: System check identified some issues: ERRORS: hello.Usertable.id: (fields.E007) Primary keys must not have null=True. HINT: Set null=False on the field, or remove primary_key=True argument.再度直して。
id = models.BigIntegerField(unique=True, blank=True, primary_key=True)
> python manage.py migrate Operations to perform: Apply all migrations: admin, auth, contenttypes, sessions Running migrations: No migrations to apply. Your models have changes that are not yet reflected in a migration, and so won't be applied. Run 'manage.py makemigrations' to make new migrations, and then re-run 'manage.py migrate' to apply them.ん?なにかおかしい。
そもそも私の理解が足りず、まずはマイグレーションをしてほしいみたい。
下記の感じかな!?・まずは、マイグレーションで移行する情報をまとめるマイグレーションファイルを作成.
> python manage.py makemigrations Migrations for 'hello': hello\migrations\0001_initial.py - Create model Usertable・マイグレーションファイルの適用.
> python manage.py migrate Operations to perform: Apply all migrations: admin, auth, contenttypes, hello, sessions Running migrations: Applying hello.0001_initial... OK管理サイトからもアクセスできるように。
下記にアクセスすれば管理サイトにアクセスできるかと思いますが、管理サイトからテーブル情報を操作できます。
http://127.0.0.1:8000/admin/そのままでは表示もされないので、管理サイトでデータベースを確認できるようにします。
作ったアプリの配下にあるadmin.pyを編集します。from django.contrib import admin from hello.models import Usertable #追加 # Register your models here. admin.site.register(Usertable) #追加Models.pyのモデル定義をした際の
class Usertable(models.Model):
クラス名をimport&registerしています。
- 投稿日:2019-10-21T00:39:24+09:00
MQTTのMessageを残らずMySQL(MariaDB)に保存するコマンド
個人的なメモ
db構造
sudo mysql -e "SHOW FULL COLUMNS FROM mqtt.msg" +-------+---------------+-------------------+------+-----+---------+-------+---------------------------------+---------+ | Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment | +-------+---------------+-------------------+------+-----+---------+-------+---------------------------------+---------+ | m | varchar(1124) | latin1_swedish_ci | YES | | NULL | | select,insert,update,references | | | tm | int(11) | NULL | YES | | NULL | | select,insert,update,references | | +-------+---------------+-------------------+------+-----+---------+-------+---------------------------------+---------+コマンド
mosquitto_sub -t "#" -v | xargs -I@ sudo mysql -e "insert into mqtt.msg (m,tm)values('@',$(date +%s))"上記だと、時間が固定になってしまいます。
SQLの方で持ってくるように変更mosquitto_sub -t "#" -v | xargs -I@ sudo mysql -e "insert into mqtt.msg (m,tm)values('@',UNIX_TIMESTAMP(NOW()))"課題
・セキュリティ的に問題有り
・トピックとMessageが分割できていないcommentいただけると嬉しいです!