20210512のMySQLに関する記事は6件です。

DBをMysql(Docker)にしたい

DBをMysql(Docker)にしたい ローカルにLaravelのアプリを作成し、DBだけDockerのMysqlを使用したい。 まずは下記に習ってdocker imageを取得 参考URLhttps://mmtomitomimm.blogspot.com/2018/04/docker-mysqldb.html Docker Desktopで確認するとlatestが入っている。 laravelアプリ内にdocker-compose.ymlファイルを作成 sampleapp  ├──docker-compose.yml docker-compose.yml version: "3" services: mysql: # imageの指定 image: "mysql" # 環境変数の設定 environment: - MYSQL_DATABASE=mydatabase - MYSQL_USER=myuser - MYSQL_PASSWORD=mypassword - MYSQL_ROOT_PASSWORD=mypassword 下記のコマンドで立ち上げ $ docker-compose up $ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 3e317f73049c mysql "docker-entrypoint.s…" About a minute ago Up About a minute 3306/tcp, 33060/tcp sampleapp_mysql_1 passwordを求められるdocker-compose.ymlに書いてあるpasswordを入力して進む $ docker exec -it sampleapp_mysql_1 sh # mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 8 Server version: 8.0.24 MySQL Community Server - GPL Copyright (c) 2000, 2021, Oracle and/or its affiliates. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mydatabase | | mysql | | performance_schema | | sys | +--------------------+ 5 rows in set (0.01 sec) 参考URL
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

LaravelのDocker環境でDBを二つ立ち上げて、アプリケーション用DBとユニットテスト用DBを切り替える方法

アプリケーション用DBとユニットテスト用のDBを分けたいときがあると思います よく見かける手法がユニットテストをインメモリDBとして立ち上げてそこでデータを投入する方法です 今回は、インメモリDBではなく、通常使用するようなDB(オンディスクDBと呼ばれるらしい)でユニットテストの時だけ切り替える方式です 前提 Doker環境で二つのmysqlを立ち上げます 二つどうやって立ち上げるかわかない方はこちらの記事を参照してください 結論 テストDB用のドライバーを設定 ユニットテスト実行時に、そのドライバーを指定 設定方法詳細 テストDB接続用のドライバーを設定する LaravelがテストDBに接続できるようにドライバーを設定します config/database.php 'test_mysql' => [ 'driver' => 'mysql', 'host' => 'test_mysql', 'port' => '3306',//ここが3307だと繋がらない。なんで? 'database' => 'your_test_db', 'username' => 'user', 'password' => 'password', 'unix_socket' => '', 'charset' => 'utf8mb4', 'collation' => 'utf8mb4_unicode_ci', 'prefix' => '', 'prefix_indexes' => true, 'strict' => false, 'engine' => 'InnoDB', 'options' => array_filter([ PDO::MYSQL_ATTR_SSL_CA => env('MYSQL_ATTR_SSL_CA'), ]), ], phpunitの実行時のDBドライバーを変更 ユニットテストを実行したときだけテストDBを読み込むようにドライバーを指定します phpunit.xml //before //<server name="DB_CONNECTION" value="mysql"/> //after <server name="DB_CONNECTION" value="test_mysql"/> 疑問 config/database.phpでportをデフォルト3306にしないと接続できないのはなぜなんだろう。。。 dockerでテスト用DBは3307にしていて、phpmyadminでは3307で接続できているのに 誰か知っていたらコメントなどで教えてください  宣伝 ツイッターもやってます 技術や製品開発に関する事などを呟いてますので、フォローお願いします https://twitter.com/wkyIghw8MlLpyJE
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

MySQL ログインと同時にDBを指定する 個人メモ

目的 ターミナルからMySQLにログインする時にDBを指定する方法をメモ的にまとめる 方法 下記コマンドを実行することでログインと同時にDBを指定する事ができる。 $ mysql -u ユーザー名 -p DB名 ターミナルログにMySQLのパスワードが残るので推奨されていないが下記のコマンドを実行することで、実行後すぐにログインできる。(-pとパスワードの間は開けない。) $ mysql -u ユーザー名 -pパスワード DB名
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

mysql2をbundle installするとエラーになる(AWS cloud9 Ubuntu18.04)

railsのDBをdevelopment, production環境共にMySQLに変えるため Gemfileにmysql2を記述してbundle installしたらエラーが出たので色々調べてみた。 環境 ・Rails 6.0.3 ・Ubuntu 18.04 ・MySQL 8.0.25 エラー内容 $ bundle install The dependency tzinfo-data (>= 0) will be unused by any of the platforms Bundler is installing for. Bundler is installing for ruby but the dependency is only for x86-mingw32, x86-mswin32, x64-mingw32, java. To add those platforms to the bundle, run `bundle lock --add-platform x86-mingw32 x86-mswin32 x64-mingw32 java`. . . . Gem::Ext::BuildError: ERROR: Failed to build gem native extension. current directory: /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/mysql2-0.5.3/ext/mysql2 /home/ubuntu/.rvm/rubies/ruby-2.6.3/bin/ruby -I /home/ubuntu/.rvm/rubies/ruby-2.6.3/lib/ruby/2.6.0 -r ./siteconf20210512-4404-8ubcpu.rb extconf.rb checking for rb_absint_size()... yes checking for rb_absint_singlebit_p()... yes checking for rb_wait_for_single_fd()... yes checking for -lmysqlclient... no ----- mysql client is missing. You may need to 'sudo apt-get install libmariadb-dev', 'sudo apt-get install libmysqlclient-dev' or 'sudo yum install mysql-devel', and try again. ----- *** extconf.rb failed *** Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers. Check the mkmf.log file for more details. You may need configuration options. Provided configuration options: --with-opt-dir --without-opt-dir --with-opt-include --without-opt-include=${opt-dir}/include --with-opt-lib --without-opt-lib=${opt-dir}/lib --with-make-prog --without-make-prog --srcdir=. --curdir --ruby=/home/ubuntu/.rvm/rubies/ruby-2.6.3/bin/$(RUBY_BASE_NAME) --with-mysql-dir --without-mysql-dir --with-mysql-include --without-mysql-include=${mysql-dir}/include --with-mysql-lib --without-mysql-lib=${mysql-dir}/lib --with-mysql-config --without-mysql-config --with-mysql-dir --without-mysql-dir --with-mysql-include --without-mysql-include=${mysql-dir}/include --with-mysql-lib --without-mysql-lib=${mysql-dir}/lib --with-mysqlclientlib --without-mysqlclientlib To see why this extension failed to compile, please check the mkmf.log which can be found here: /home/ubuntu/.rvm/gems/ruby-2.6.3/extensions/x86_64-linux/2.6.0/mysql2-0.5.3/mkmf.log extconf failed, exit code 1 Gem files will remain installed in /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/mysql2-0.5.3 for inspection. Results logged to /home/ubuntu/.rvm/gems/ruby-2.6.3/extensions/x86_64-linux/2.6.0/mysql2-0.5.3/gem_make.out An error occurred while installing mysql2 (0.5.3), and Bundler cannot continue. Make sure that `gem install mysql2 -v '0.5.3' --source 'https://rubygems.org/'` succeeds before bundling. In Gemfile: mysql2 bundle installをしてみると、上のようなエラーが出てきたので とりあえずググってみると参考になる記事がいくつかヒットしたので これらを参考にさせて頂き色々試してみた。 ・【Rails】MySQL2がbundle installできない時の対応方法 ・Cloud9でRailsプロジェクトを作成しよう ・【備忘録】ubuntuでbundle installするとmysqlでこける やってみたこと ①LDFLAGSやCPPFLAGSの設定を変えてみる 1つ目の記事を参考に下のコードをそのまま実行して、 その後bundle installをしてみた。 $ bundle config --local build.mysql2 "--with-cppflags=-I/usr/local/opt/openssl/include" $ bundle config --local build.mysql2 "--with-ldflags=-L/usr/local/opt/openssl/lib" しかし、最初のbundle installと同じエラーメッセージが出てしまった。 おそらく1つ目の記事はmac OSの場合、有効な方法だったのかもしれない ②sudo yum install mysql-develを実行してみる 次に2つ目の記事を参考に こちらのコードを実行してみると $ sudo yum install mysql-devel sudo: yum: command not found yumコマンドが見つからないとなったので、 これについても色々と調べると それっぽいコマンドが見つかったが そもそもyumはRedhat系のlinuxで使われるパッケージ管理システムで Debian系のubuntuではaptやapt-getを使うのが普通なので apt-getで解決できる方法を探すことにした。 ③sudo apt-get install libmariadb-dev と libmysqlclient-devを実行してみる 3つ目の記事では $ sudo apt install libmysqlclient-dev というコマンドが用いられていたが Ubuntuのバージョンが違かったので これを参考にしつつ最初のエラーメッセージにあったヒントを用いることにした。 用いたエラーメッセージを抜粋 ----- mysql client is missing. You may need to 'sudo apt-get install libmariadb-dev', 'sudo apt-get install libmysqlclient-dev' or 'sudo yum install mysql-devel', and try again. ----- このメッセージには3つのコマンドが書いてあり 3つ目は既に試してある。 残った2つを見てみると参考にした記事にあったコードと似たものがあった。 apt-getから始まるコマンド2つ or yumから始まるコマンド を実行してみる必要があるとのことだったので そこで 2つのコマンドを試してみることにした。 $ sudo apt-get install libmariadb-dev Reading package lists... Done Building dependency tree Reading state information... Done . . . (たくさんコードがあって) . . . Processing triggers for man-db (2.8.3-2ubuntu0.1) ... Processing triggers for libc-bin (2.27-3ubuntu1.4) ... $ sudo apt-get install libmysqlclient-dev Reading package lists... Done Building dependency tree Reading state information... Done . . . (たくさんコードがあって) . . . Processing triggers for man-db (2.8.3-2ubuntu0.1) ... Processing triggers for libc-bin (2.27-3ubuntu1.4) ... 特にエラーメッセージは発生せず 「これは行けそう!」と思いながら そのままbundle installを実行 $ bundle install (色々コードが出てきて) . . . Bundle complete! 17 Gemfile dependencies, 76 gems now installed. Use `bundle info [gemname]` to see where a bundled gem is installed. 「いけたー!」 これにて無事にインストールができた。 結論 Ubuntu18.04の場合は $ sudo apt-get install libmariadb-dev $ sudo apt-get install libmysqlclient-dev を実行すればbundle installができるようになる。 とりあえず解決はできたが yumやapt-getの知識が全然ないので調べておく必要があるなと思った。 余談 ----- mysql client is missing. You may need to 'sudo apt-get install libmariadb-dev', 'sudo apt-get install libmysqlclient-dev' or 'sudo yum install mysql-devel', and try again. ----- 最初にこのエラーメッセージを「どれか1つ選んで実行すれば良い」と勘違いして $ sudo apt-get install libmysqlclient-devだけを実行してしまい $ bundle exec rails db:createを実行する時に rails aborted! LoadError: libmysqlclient.so.20: cannot open shared object file: No such file or directory - /home/ubuntu/.rvm/gems/ruby-2.6.3/gems/mysql2-0.5.3/lib/mysql2/mysql2.so というエラーが起きてしまったので 2つのコマンドを実行しないといけないということが分かりました。
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

AWS ec2 デプロイ laravel8 php8 mysql8

ほぼ受け売りです。 参考: 公式 LaravelをAWSのEC2へデプロイする手順 laravelをAWS EC2にデプロイする インバウンド HTTP (ポート 80) 接続をインスタンスに許可するセキュリティルールを追加していない場合には、ルールを追加する。 公式の最初のほうに書かれてあるのを参考に。 php8.0をインストール sudo amazon-linux-extras install -y php8.0 sudo yum install php-mbstring php-openssl php-xml unzip Apacheのインストール sudo yum install -y httpd 設定 wabサーバの起動 sudo service httpd start システムがブートするたびにapacheが起動するよう設定 sudo chkconfig httpd on 有効か確認 chkconfig --list httpd ウェブサーバーをテストします。ウェブブラウザで、インスタンスのパブリック DNS アドレス (またはパブリック IP アドレス) を入力します。 Apacheの初期画面が表示されれば成功です。 ec2-user アカウントがこのディレクトリで複数のファイルを操作することを許可するには、ディレクトリの所有権とアクセス許可を変更する必要があります。 ec2-userをapacheグループに追加 sudo usermod -a -G apache ec2-user いったんログアウトして、再度ログイン exit /var/www とそのコンテンツのグループ所有権を apache グループに変更 sudo chown -R ec2-user:apache /var/www グループに、/var/wwwの書き込み許可追加 sudo chmod 2775 /var/www /var/www とサブディレクトのディレクトリ許可を変更 find /var/www -type d -exec sudo chmod 2775 {} \; /var/www とサブディレクトリのファイル許可を変更 find /var/www -type f -exec sudo chmod 0664 {} \; MYSQL8インストール 既存でインストールされている邪魔者を削除 sudo yum remove mariadb-libs sudo rm -rf /var/lib/mysql リポジトリのインストール sudo rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm MYSQLのインストール cd /usr/lib64 sudo ln libsasl2.so.3 libsasl2.so.2 sudo yum clean all sudo yum -y install mysql-community-server mysql-devel MYSQLの起動 sudo systemctl start mysqld.service sudo systemctl enable mysqld.service 初期パスワードに確認 sudo cat /var/log/mysqld.log | grep 'temporary password' パスワード変更 sudo mysql_secure_installation 再起動 sudo systemctl restart mysqld.service gitをインストール インストール sudo curl -sS https://getcomposer.org/installer | php パスを通す sudo mv composer.phar /usr/local/bin/composer composer自身のインストール curl -sS https://getcomposer.org/installer | php composerコマンドのパスを通す sudo mv composer.phar /usr/local/bin/composer パス確認(/usr/local/bin/composerと表示されればOK) which composer Laravelプロジェクトをgit clone sudo yum install git cd /var/www git clone [URL] Apacheの設定変更 http.confファイルのDocumentRootの変更 Laravelでは、プロジェクト内のpublicディレクトリをドキュメントルートに指定する必要がある sudo vi /etc/httpd/conf/httpd.conf キーボードで「i」を押して入力状態にする DocumentRoot "/var/www/html"の箇所をDocumentRoot "/var/www/プロジェクト名/public"に変更 http.confファイルに以下のDirectoryを追加(.htaccessの有効化) <Directory /var/www/プロジェクト名/public> AllowOverride All </Directory> Escキーを押して次のコマンドを入力(画面左下に入力中のコマンドが表示される) :wq Apacheの設定変更後は、再起動。 sudo service httpd restart パッケージのインストール cd /var/www/[プロジェクトのフォルダ名] composer.jsonファイルがない場合 composer init vendorディレクトリが生成される composer install Laravelプロジェクトの設定 sudo chmod -R 777 /var/www/[プロジェクト名]/storage sudo chmod -R 775 /var/www/[プロジェクト名]/bootstrap/cache config, routeのキャッシュクリア だいたいなんかエラー出たら、これ打っときゃ直る。 php artisan config:cache php artisan route:cache .envの設定 git cloneしたLaravelプロジェクトには.envファイルがないので、 composer insatallで作成された、.env.exampleを使用する cp .env.example .env vi .env APP_URL=http://IPアドレス ←サーバーのIPにする DB_CONNECTION=mysql DB_HOST=←RDSのエンドポイント DB_DATABASE=データベース名 DB_USERNAME=RDS作成時のユーザ名 DB_PASSWORD=設定したパスワード キーを作成し、キャッシュをクリアする php artisan key:generate php artisan config:clear 後は煮るなり焼くなり
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

mysql が急に壊れた。The server quit without updating PID file エラー

結論から言うと macの再起動で治りました。 それで治る事に気付かずにデータベース削除しちゃったので、忘れないように忘備録。 ①pidファイルの作成 ここを参考にしてやってみましたがダメ。 ターミナル $ touch /usr/local/var/mysql/*****.local.pid $ sudo chown -R _mysql:_mysql /usr/local/var/mysql/ ②DBの削除、再作成 泣く泣く/usr/local/var/mysql も削除しましたがダメ。 ターミナル $ sudo rm -rf /usr/local/var/mysql $ brew uninstall mysql $ brew install mysql ここでようやく macの再起動したら治りました笑。 \(^o^)/ DB消しちゃった。 原因はよく分かりませんが、そういえば「システム環境設定」の「共有」のコンピュータ名とか変えたのでそれがよくなかったかも。 phpmyadminに入れない 新しいDBのphpmyadminにrootで入れませんでした。 "The server requested authentication method unknown to the client [caching_sha2_password]"エラー このエラーがいつ出たか忘れてしまいましたが、とりあえずこれで直しました。 mysql mysql> SELECT user, host, plugin FROM mysql.user; mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'P@ssw0rd'; あとこれも MySQL5.7以降では、デフォルトでrootユーザーのパスワードが自動で初期設定されるとか。 ここを参考にしてパスワード変えました。 mysql mysql> set password for root@localhost='新パスワード';
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む