- 投稿日:2020-02-20T20:21:28+09:00
さくらVPS Cent OS7.7 にMySQL8をインストールした
前回はNginxを入れました。
https://qiita.com/tears-aya/items/ca1d3ab12a55f6d9eee7今回はMySQLを入れます。
MariaDB削除
CentOS7では、MariaDBが最初からインストールされています。
MySQLと競合しないようにMariaDBとデータベースを削除。
※MariaDBとは
MySQL派生として開発されている、オープンソースの関係データベースシステムです。sudo yum remove -y mariadb-libs rm -rf /var/lib/mysqlMySQLのレポジトリを追加
https://dev.mysql.com/downloads/repo/yum/
こちらからダウンロードしたいバージョンなどを確認する。
今回はMySQL8.0を選択。sudo yum localinstall http://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpmMySQLのインストールとバージョンの確認
sudo yum -y install mysql-community-server mysqld --version /usr/sbin/mysqld Ver 8.0.19 for Linux on x86_64 (MySQL Community Server - GPL)MySQLの起動と永続化
sudo systemctl start mysqld.service sudo systemctl enable mysqld.service初期パスワードをメモする
sudo grep password /var/log/mysqld.log 2020-02-14T02:04:39.509953Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: i6DRJey8Ea;y #これをメモるmysql_secure_installationを実行
mysql_secure_installation Securing the MySQL server deployment. Enter password for user root: #メモしたパスワードを入力 The existing password for the user account root has expired. Please set a new password. New password: #新しいパスワード(英字大小文字、数字、記号) Re-enter new password: #パスワード確認 Estimated strength of the password: 100 Change the password for root ? ((Press y|Y for Yes, any other key for No) : #yで良い New password: #パスワードを再入力 Re-enter new password: #パスワードを再入力 Estimated strength of the password: 100 Do you wish to continue with the password provided?(Press y|Y for Yes, any other key for No) :#yで良い Remove anonymous users? (Press y|Y for Yes, any other key for No) : #匿名ユーザーの削除なのでyで良い Disallow root login remotely? (Press y|Y for Yes, any other key for No) : #リモートでrootを利用できないように(yにした) Remove test database and access to it? (Press y|Y for Yes, any other key for No) : #テストDBを削除する。yにした Reload privilege tables now? (Press y|Y for Yes, any other key for No) : #テーブル権限読み込み。yにした All done!my.cnfの編集
下記に2行を追記した。
character-set-server = utf8 #文字コードをUTF8に設定
default_password_lifetime = 0 #パスワードの有効期限をなしにするsudo vi /etc/my.cnf [mysqld] # # Remove leading # and set to the amount of RAM for the most important data # cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%. # innodb_buffer_pool_size = 128M # # Remove the leading "# " to disable binary logging # Binary logging captures changes between backups and is enabled by # default. It's default setting is log_bin=binlog # disable_log_bin # # Remove leading # to set options mainly useful for reporting servers. # The server defaults are faster for transactions and fast SELECTs. # Adjust sizes as needed, experiment to find the optimal values. # join_buffer_size = 128M # sort_buffer_size = 2M # read_rnd_buffer_size = 2M # # Remove leading # to revert to previous value for default_authentication_plugin, # this will increase compatibility with older clients. For background, see: # https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin # default-authentication-plugin=mysql_native_password datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid #追記 character-set-server = utf8 default_password_lifetime = 0再起動
systemctl restart mysqld.serviceMySQLへログイン
mysql -u root -pと私の場合はここでログインできない事態が発生しました。
原因は上で設定したパスワードのメモが間違ってるくらいしか思いつかないのですが、
こちらで対処して無事ログイン。
https://qiita.com/tears-aya/items/d290967276b753d5f715以上でインストール作業終了です。
下記記事を参考にさせて頂きました。
https://www.sakura-vps.net/centos7-setting-list/mysql-settings-for-sakura-vps-centos7/
https://qiita.com/zaburo/items/7518a432d915c061983f
- 投稿日:2020-02-20T20:07:03+09:00
Railsで投稿した内容をGoogleMap上にmarkerで表示させる方法
はじめに
世界中の絶景を投稿できるアプリが作れます。
マップの表示方法はGoogleMapsAPIを使いました。
投稿した内容から自動的に軽度と緯度を取得してGoogleMapsAPIのマップ上に表示させます。
完成形はこんな感じ
環境
- Ruby 2.5.1
- Rails 5.2.3
- MySQL 5.6
目次
- GoogleMapsAPIのKEYを取得
- 簡単なアプリを作成しとりあえずGoogleMapsをアプリ上に表示させる
- 投稿機能を作り軽度、緯度取得し、マップ上に表示
GoogleMapsのKEYを取得
(グーグルアカウントにログインしてから始めてください)
まずGoogle Map PlatformからKEYを取得します
全て選択し続行。
プロジェクト名はなんでもいいですが今回はMyProjectを選択
支払い方法を入力します。
topページに移動しますので下の方のMaps Platfomを選択
Maps JavaScript APIを選択し有効を押します
画面上にあるAPI とサービスの認証情報
認証情報を作成を選択しAPIを作成。
画面にでてくるのがAPIキーになるので保存しといてください。(必要な場合はキーの制限をしてください)簡単なアプリを作成しgooglemapをアプリ上に表示させる
アプリ名はここではgmapにします
ここの部分は自分のアプリ名にしてください。
まずアプリの雛形とデータベース設計しますターミナル上で
rails _5.2.3_ new gmap -d mysql cd gmap rails g controller maps rails db:create rails db:migrateerbになっているのでhamlに変換します。
ここは任意で大丈夫です。
※erbをhamlに簡単に変えてくれるサイトですGemfilegem "haml-rails", ">= 1.0", '<= 2.0.1'bundel install rails haml:erb2haml
マップを表示させます
rails5.2以上なので今回はcredentialsを使いますroutes.rbRails.application.routes.draw do root to: "maps#index" endviews/maps/index.html.haml%div{:style => "width: 100%;"} #map{:style => "width: 100%; height: 100vh;"} :javascript function initMap(){ let map = new google.maps.Map(document.getElementById('map'), { center: {lat: -34.397, lng: 150.644}, zoom: 8 }); } %script{:src => "https://maps.googleapis.com/maps/api/js?key=#{Rails.application.credentials[:GOOGLE_MAP_KEY]}&callback=initMap"}先ほどのAPIキーをcredentialsで隠しておきます
ターミナル上でEDITOR="vi" bin/rails credentials:editGOOGLE_MAP_KEY: MyAPIKeyMyAPIKeyの部分は先ほど取得したkeyを入力してください
これで一応マップ表示ができたと思います!
投稿機能を作り軽度、緯度取得
まずは投稿機能を作るためにpostsのviewとcontroller,modelを作ります。
rails g scaffold posts name:string description:string latitude:float longitude:float rake db:migrate表示をgmaps4railsのgemを使って表示する方法に変えます。
Gemfilegem 'gmaps4rails'underscore、gmaps/googleをapplicaton.jsに追加します。
//= require underscore //追加 //= require gmaps/google //追加 //= require_tree .app/assets/javascripts/underscore.jsを作り
こちらの中身を全部コピペviews/maps/index.html.haml%div{:style => "width: 100%;"} #map{:style => "width: 100%; height: 100vh;"} :javascript handler = Gmaps.build('Google'); handler.buildMap({ provider: {mapTypeId: 'hybrid'}, internal: {id: 'map'} }, function(){ markers = handler.addMarkers(#{raw @hash.to_json}) handler.bounds.extendWith(markers); handler.fitMapToBounds(); handler.getMap().setCenter(new google.maps.LatLng(35.681298, 139.7640582)); handler.getMap().setZoom(4); });provider: {mapTypeId: 'hybrid'}の部分でマップのタイプを変えることができます。
何もなければ最初のタイプです。
他のタイプは下記を参照してください。ROADMAP 道路や建物などが表示される地図です
SATELLITE 衛星写真を使った地図です
HYBRID ROADMAPとSATELLITEの複合した地図です
TERRAIN 地形情報を使った地図ですapplicationにkeyを移してどこでも使えるようにします。
application.html.haml!!! %html %head %meta{:content => "text/html; charset=UTF-8", "http-equiv" => "Content-Type"}/ %title Gmap = csrf_meta_tags = csp_meta_tag = stylesheet_link_tag 'application', media: 'all', 'data-turbolinks-track': 'reload' = javascript_include_tag 'application', 'data-turbolinks-track': 'reload' %script{:src => "//maps.google.com/maps/api/js?key=#{Rails.application.credentials[:GOOGLE_MAP_KEY]}"} %script{:src => "//cdn.rawgit.com/mahnunchik/markerclustererplus/master/dist/markerclusterer.min.js"} = yieldコントローラーに投稿した場所にmarkerが立つようにします。
maps_controller.rbclass MapsController < ApplicationController def index @posts = Post.all @hash = Gmaps4rails.build_markers(@post) do |post, marker| marker.lat post.latitude marker.lng post.longitude marker.infowindow post.description end end endmarker.infowindow post.descriptionのところに表示させたいカラムを変えれば表示内容を変えれます。
今回はdescriptionにします。これでマーカーが立つようになりました。
あとは新規投稿で軽度、緯度を取得できるようにしますgem 'geocoder'post.rbclass Post < ApplicationRecord geocoded_by :name after_validation :geocode end名前のカラム名で軽度と緯度が取得できるようになったので
あとは送信する時に余計なカラムを消しておきます。posts/_form.html.haml.field = f.label :name = f.text_field :name .field = f.label :description = f.text_field :description .field = f.label :latitude = f.text_field :latitude .field = f.label :longitude = f.text_field :longitude .actions = f.submit 'Save'のlatitudeとlongitudeの項目を消します。
これで完成です!最後に
間違っているところがあったら教えてください…
- 投稿日:2020-02-20T14:51:15+09:00
Rails 本番環境でデータベースをリセット
プログラミング初心者が備忘録のために書いています。
本番環境でrails db:migrate:reset RAILS_ENV=productionをしてもエラーになったので別の方法を調べてみたところ解決できたのでまとめました。
データベースを削除する
データベースを消したいアプリに移動してから
ターミナル[ec2-user@*******]$ RAILS_ENV=production DISABLE_DATABASE_ENVIRONMENT_CHECK=1 bundle exec rake db:drop新たにデータベースを作成
上記と同じディレクトリで実行するとうまくいかなかったので、currentに移動してから実行
ターミナル[ec2-user@******* current]$ rake db:create RAILS_ENV=production [ec2-user@******* current]$ rake db:migrate RAILS_ENV=productionseedも反映させたい場合
ターミナル[ec2-user@******* current]$ rake db:seed RAILS_ENV=production作られているか確認
ターミナル[ec2-user@*******]$ mysql -u root -p; ## 実行後パスワードを入力 mysql > show databases; ## データベースの確認 mysql > use データベース名; mysql > show tables; mysql > select * from テーブル名; ## 中身の確認まとめ
開発環境でデータベースを書き換えたことでうまくdb:migrateができなかったのですが、上記の方法で一応解決できました。
自分が忘れないように記録しました。
- 投稿日:2020-02-20T14:30:00+09:00
We're sorry, but something went wrong.
We're sorry, but something went wrong.
このエラーはサーバーのエラーが多いのでエラーコードを見にいきましょう。
まず、サーバーにログインしましょう。
実行してるフォルダにいきましょう
cd /var/www/レポジトリ名/ls コマンドで中身をみてみましょう。
[ec2-user@ip-000-00-00-000 レポジトリ名]$ ls Gemfile Gemfile.lock README.md Rakefile app bin config config.ru current db lib log package.json public releases repo revisions.log shared storage test tmp vendorこの中にあるcurrentを参照します。
[ec2-user@ip-000-00-00-000 レポジトリ名]$ cd current[ec2-user@ip-000-00-00-000 current]$こうなればOK!
また中身をみていきましょう。[ec2-user@ip-000-00-00-000 current]$ ls Capfile Gemfile Gemfile.lock README.md REVISION Rakefile app assets_manifest_backup bin config config.ru db lib log package.json public spec storage test tmp vendor次は logをみていきましょう!
[ec2-user@ip-000-00-00-000 current]$ cd log次はlogの中をみましょう
[ec2-user@ip-172-31-38-129 log]$ ls production.log show unicorn.stderr.log unicorn.stdout.logこの中にある、'production.log''unicorn.stderr.log'を'less'で参照しましょう
[ec2-user@ip-172-31-38-129 log]$ less production.log [ec2-user@ip-172-31-38-129 log]$ less unicorn.stderr.logで中を見てエラーコードをみましょう!
今回はDB内のエラーでviewが表示できなくて起こったエラーでした。
本番環境DBの中を削除する方法
https://qiita.com/QgqKZmHUkJv26pG/items/654c68e090db58c01964以前はこのエラーでした。
https://qiita.com/QgqKZmHUkJv26pG/items/6f1bf5ec3e1a7c7f3b9d
- 投稿日:2020-02-20T13:10:29+09:00
EC2の本番環境DBをMySQLで削除する方法
本番環境のDBをいじる方法を紹介します。
次にmysqlにログインしましょう。
mysql -u root -pログイン時はパスワードを求められるので入力しましょう。
この画面が出たら成功です!
mysql>まず、データベースの中をみてみましょう。
mysql> show databases;データベースを選択します。
mysql> use freemarket_sample_60b_production;データベースの中にあるテーブルをみてみましょう。
mysql> show tables;次は削除したいテーブルを選びましょう。
mysql> select * from items;今回は、itemsテーブルの ID=4 を消したいと思います。
mysql> delete from items where id='4';もう一度確認して見ましょう。
mysql> select * from items;これで完了です!
おまけ
typeカラムのテキストタイプを削除
mysql> delete from items where type='text';全テーブル削除
mysql> delete form items;
- 投稿日:2020-02-20T12:27:43+09:00
MS SQL Server からMySQL(MariaDB) へテーブルデータ移行
テキストCSV形式での移行
環境
移行元
- Microsoft SQL Server 2008 R2
- Windows 2003 Foundation
移行先
- MariaDB (mysql Ver 15.1 Distrib 10.1.44-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2)
- Ubuntu 18.04
あらかじめ、データベース、テーブルは作っておく。
cf.,
「Microsoft SQL Server から MySQL(MariaDB) へテーブル移行」
https://qiita.com/nanbuwks/items/334dffcbafa00e0fa107元データ
1,4,相 上尾,アイ ウエオ,0,1989-11-16 00:00:00,2018,A,1,,1000001,東京都千代田区皇居1-1-1,555-5555-5555 2,6,柿 久卦子,カキ クケコ,1,1977-12-20 00:00:00,2017,0,2,,1000001,東京都千代田区皇居2,555-5555-5555 3,6,Abcd Efgf,アブセド エフガフ,0,1998-02-25 00:00:00,2017,B,2,,1000001,東京都千代田区皇居2 コーポ長和,555-5555-5555 4,1,佐志 嵩山想,サシ スセソ,1,1961-1-22 00:00:00,2016,0,2,,1000001,東京都千代田区皇居3,555-5555-5555 5,8,達 伝手頂,タチ ツテト,0,1945-01-12 00:00:00,2019,C,1,,1000001,東京都千代田区皇居4,555-5555-5555変換スクリプト
まず、nkfで文字コードをutfにしておく。
nkf -Lu 会員.cav > 会員.csv.utf8MySQL(MariaDB)から
MariaDB [(none)]> use test; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed MariaDB [test]> LOAD DATA LOCAL INFILE '/media/nanbuwks/boot/tokushima/会員.csv.utf8' INTO TABLE 会員 FIELDS TERMINATED BY ','; Query OK, 5 rows affected (0.00 sec) Records: 5 Deleted: 0 Skipped: 0 Warnings: 0 MariaDB [test]> select * from 会員; +------+--------------+------------------+---------------------------+--------+---------------------+--------------+-----------------+--------+-----------------+--------------+----------------------------------------------+---------------+ | stid | 会員番号 | 漢字氏名 | フリガナ | 性別 | 生年月日 | 入会年度 | 所属コード | 年次 | 種別コード | 郵便番号 | 現住所 | 携帯番号 | +------+--------------+------------------+---------------------------+--------+---------------------+--------------+-----------------+--------+-----------------+--------------+----------------------------------------------+---------------+ | 1 | 4 | 相 上尾 | アイ ウエオ | 0 | 1989-11-16 00:00:00 | 2018 | A | 1 | | 1000001 | 東京都千代田区皇居1-1-1 | 555-5555-5555 | | 2 | 6 | 柿 久卦子 | カキ クケコ | 1 | 1977-12-20 00:00:00 | 2017 | 0 | 2 | | 1000001 | 東京都千代田区皇居2 | 555-5555-5555 | | 3 | 6 | Abcd Efgf | アブセド エフガフ | 0 | 1998-02-25 00:00:00 | 2017 | B | 2 | | 1000001 | 東京都千代田区皇居2 コーポ長和 | 555-5555-5555 | | 4 | 1 | 佐志 嵩山想 | サシ スセソ | 1 | 1961-01-22 00:00:00 | 2016 | 0 | 2 | | 1000001 | 東京都千代田区皇居3 | 555-5555-5555 | | 5 | 8 | 達 伝手頂 | タチ ツテト | 0 | 1945-01-12 00:00:00 | 2019 | C | 1 | | 1000001 | 東京都千代田区皇居4 | 555-5555-5555 | +------+--------------+------------------+---------------------------+--------+---------------------+--------------+-----------------+--------+-----------------+--------------+----------------------------------------------+---------------+ 5 rows in set (0.00 sec)
- 投稿日:2020-02-20T11:36:59+09:00
Laravel DB.com ” New!! チーム共有機能 ”
Laravel DB.com ってなに?
Laravel DB.com ってなに?前回の紹介記事です!
https://qiita.com/daisu_yamazaki/items/068595670bdc2b6fe3fcNew「チーム共有機能」
「シェアData 送信側」
1. [シェアData]作成
2. [シェアData]IDをコピー
「シェアData 受信側」
1.[シェアData]読み込み
2.「Read」ボタンをクリックしてデータを受信表示しましょう。
3.シェアデータの複製が完了しました。
受信側にデータが入りましたので、受信側もそのデータを活用できるようになります。
現在はベータ版機能として、「1データのみ共有可能」 になります。
それだけでも、便利になるはずですので、お試しいただければと思います。Laravel専用ツール!!
日本から世界へ!世界で使われるプロダクトになることを願っております。
是非、応援の程よろしくお願いいたしますm(_ _)m
ツイッターのフォローも興味があれば!!
Twitter: LaravelDB.com
LaravelDB.com解説ページ一覧
コード書かずに超スピード開発~(DEMO動画あり)~最新版『 Laravel DB.com 』
https://qiita.com/daisu_yamazaki/items/068595670bdc2b6fe3fc
LaravelDB.com 対応カラム一覧
https://qiita.com/daisu_yamazaki/items/92dc3cc599a264c3fb0f
LaravelDB.com テーブル命名ルール
https://qiita.com/daisu_yamazaki/items/1cb5987cc6d1008def82
LaravelDb.com integerの注意点
https://qiita.com/daisu_yamazaki/items/f2e6d58cfa20fa81fd54
LaravelDB.com Faker(テストデータ投入)
https://qiita.com/daisu_yamazaki/items/57669e8fa2c256d85c95
以上
- 投稿日:2020-02-20T11:36:59+09:00
【LaravelDB.com】New !! ”チーム共有機能 ” 早々に追加された訳
Laravel DB.com ってなに?
Laravel DB.com ってなに?前回の紹介記事です!
https://qiita.com/daisu_yamazaki/items/068595670bdc2b6fe3fcなぜ1週間程度で”Team共有機能”を実装したのか?
私は、G'sACADEMYや大学院/大学などで先生をしてます。
Team開発や、メンターとのオンラインMTG用にあった方が助かるとの希望をいくつか聞きました。更にTwitterでもアンケートを取り、微妙な数字でしたが、とりあえず学生の意見もあったのでシンプルな機能であれば実装しようと思いました。
「どうやったら?早く、シンプルに実装可能か?」を仕様検討していたのですが、一つの方法を昨日考えつきました。昨日から朝まで実装、不具合があったので、さっきの午前中までかかり完成(ベータ版としておきます)。
必要な気がしてたので、まずは実装して、これから改善ですね。スピードは時間を有意義に使うための重要なスキルですね。これで、少しでも、オンライン上でデータのやり取りができたら良いのですが。。。また、追加機能・改修等があれば記事を追加して行きたいと思います。New「チーム共有機能」
【シェアData 送信側】
1. [シェアData]作成
POINT:
この時点で共有データが作成されます。
見せたい相手にIDを渡しておいて、変更があれば「Create a [Share ID]」ボタンを押すと毎度データ更新されることを知っておきましょう! 「データ更新したので見てください!」って後から言えるってことですね。2. [シェアData]IDをコピー
【シェアData 受信側】
1.[シェアData]読み込み
相手は送られてきた[シェアData]IDを貼り付けます。
こちらのIDを知っていれば誰でも読み込めます!見て欲しい人に渡しましょう!
※LOGIN(Googleアカウントで)しないと見れないことは認識しておいてください。
2.「Read」ボタンをクリックしてデータを受信表示しましょう。
3.シェアデータの複製が完了しました。
受信側にデータが入りましたので、受信側もそのデータを活用できるようになります。
現在はベータ版機能として、「1データのみ共有可能」 になります。
それだけでも、便利になるはずですので、お試しいただければと思います。Laravel専用ツール!!
日本から世界へ!世界で使われるプロダクトになることを願っております。
是非、応援の程よろしくお願いいたしますm(_ _)m
ツイッターのフォローも興味があれば!!
Twitter: LaravelDB.com
LaravelDB.com解説ページ一覧
コード書かずに超スピード開発~(DEMO動画あり)~最新版『 Laravel DB.com 』
https://qiita.com/daisu_yamazaki/items/068595670bdc2b6fe3fc
LaravelDB.com 対応カラム一覧
https://qiita.com/daisu_yamazaki/items/92dc3cc599a264c3fb0f
LaravelDB.com テーブル命名ルール
https://qiita.com/daisu_yamazaki/items/1cb5987cc6d1008def82
LaravelDb.com integerの注意点
https://qiita.com/daisu_yamazaki/items/f2e6d58cfa20fa81fd54
LaravelDB.com Faker(テストデータ投入)
https://qiita.com/daisu_yamazaki/items/57669e8fa2c256d85c95
以上
- 投稿日:2020-02-20T10:28:10+09:00
ERROR 1045 (28000): Access denied for user 'root'@'%' (using password: YES)となったときの対応方法
- 環境
- MySQL 5.7.28(RDS)
全く関係ないけど気がついた・・・「%」を指定するときは「'(シングルクォーテーション)」で囲むとエラーになる・・・「`(名前がわからない)」で囲むようだ。
事象 : GRANT文でグローバル権限を割り当てたら怒られた
mysql> grant all on *.* to 'ponsuke'@'localhost'; ERROR 1045 (28000): Access denied for user 'root'@'%' (using password: YES)試行錯誤
権限があるからGRANT文できるはずなのに・・・
mysql> select host,user,select_priv,create_priv,insert_priv,grant_priv,account_locked from mysql.user; +-----------+-----------+-------------+-------------+-------------+------------+----------------+ | host | user | select_priv | create_priv | insert_priv | grant_priv | account_locked | +-----------+-----------+-------------+-------------+-------------+------------+----------------+ | localhost | rdsadmin | Y | Y | Y | Y | N | | localhost | mysql.sys | N | N | N | N | Y | | % | root | Y | Y | Y | Y | N | | localhost | ponsuke | N | N | N | N | N | +-----------+-----------+-------------+-------------+-------------+------------+----------------+ 4 rows in set (0.16 sec) mysql> show grants for 'root'@`%`; +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Grants for root@% | +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO 'root'@'%' WITH GRANT OPTION | +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.15 sec)「`%`.*」にするとエラーにならないけど・・・権限は付与されない・・・
mysql> grant all on `%`.* to 'ponsuke'@'localhost' identified by 'ponsuke'; Query OK, 0 rows affected, 1 warning (0.16 sec) mysql> select host,user,select_priv,create_priv,insert_priv,grant_priv,account_locked from mysql.user; +-----------+-----------+-------------+-------------+-------------+------------+----------------+ | host | user | select_priv | create_priv | insert_priv | grant_priv | account_locked | +-----------+-----------+-------------+-------------+-------------+------------+----------------+ | localhost | rdsadmin | Y | Y | Y | Y | N | | localhost | mysql.sys | N | N | N | N | Y | | % | root | Y | Y | Y | Y | N | | localhost | ponsuke | N | N | N | N | N | +-----------+-----------+-------------+-------------+-------------+------------+----------------+ 4 rows in set (0.15 sec)原因 : RDSでは
GRANT ALL *.*
ができないからRDSではSuper権限が付与されたユーザはAWS側が管理用に確保しているrdsadminというユーザのみになっており、自身で作成したユーザにはSuper権限が付与されていません(付与することもできません)。
[RDS (MySQL)] Super権限操作で出たエラー | ハックノート-- 確かにrdsadminには管理者権限がついている mysql> show grants for 'rdsadmin'@'localhost'; +-------------------------------------------------------------------------+ | Grants for rdsadmin@localhost | +-------------------------------------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO 'rdsadmin'@'localhost' WITH GRANT OPTION | +-------------------------------------------------------------------------+ 1 row in set (0.15 sec)対応 : rootと同じ権限を付与していろいろできるようにする
管理者権限ではないけどやりたいことができればいい。
-- root権限を表示してコピーする mysql> show grants for 'root'@`%`; +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Grants for root@% | +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO 'root'@'%' WITH GRANT OPTION | +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.16 sec) -- 貼り付けてユーザーの指定を対象のユーザに書き換える mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO 'ponsuke'@'localhost' WITH GRANT OPTION; Query OK, 0 rows affected (0.26 sec) -- 権限を確認 mysql> select host,user,select_priv,create_priv,insert_priv,grant_priv,account_locked from mysql.user; +-----------+-----------+-------------+-------------+-------------+------------+----------------+ | host | user | select_priv | create_priv | insert_priv | grant_priv | account_locked | +-----------+-----------+-------------+-------------+-------------+------------+----------------+ | localhost | rdsadmin | Y | Y | Y | Y | N | | localhost | mysql.sys | N | N | N | N | Y | | % | root | Y | Y | Y | Y | N | | localhost | ponsuke | Y | Y | Y | Y | N | +-----------+-----------+-------------+-------------+-------------+------------+----------------+ 4 rows in set (0.15 sec) mysql>
- 投稿日:2020-02-20T01:08:17+09:00
文系出身エンジニアが学ぶMySQLサーバーの構築(AWS)
記事を書く背景
『Amazon Web Services 基礎からのネットワーク&サーバー構築』を読み進める中で、AWSにMySQLサーバーを構築する際のつまずいたところとその対処方法を記載しようと思います。
環境
OS : Amazon Linux release 2 (Karoo)
つまずきポイント1:MySQLをインストールできない
下記コマンドを打つとエラーが発生。
$ sudo yum -y install mysql-server原因
Amazon EC2のyumリポジトリにMySQLのリポジトリが存在していないため。
下記コマンドで確認できます。$ yum list installed | grep mysql対処方法
下記コマンドでAmazon EC2のyumリポジトリにMySQLのリポジトリを追加
$ sudo yum localinstall http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpmこれでめでたくMySQLをインストールする準備が整いました。
そして、下記コマンドでMySQLをインストールします。$ sudo yum -y install mysql-community-server無事にインストールできていることを確認します。
$ mysqld --version mysqld Ver 5.7.29 for Linux on x86_64 (MySQL Community Server (GPL))ちなみに、、、
Amazon EC2にはMySQL派生版のMariaDBがインストール済みだそうです。
こちらは使わないのでアンインストールしました。// MariaDBがインストールされていることを確認 $ sudo yum list installed | grep mariadb // MariaDBの削除 $ sudo yum remove mariadb-libsつまずきポイント2:Passwordの設定ができない
passwordの変更をしようと下記コマンドを打つとエラーが出てしまい、ログインパスワードの変更ができない。
$ mysqladmin -u root password ERROR 1045 (28000): Access denied for user 'ec2-user'@'localhost' (using password: NO)原因
rootユーザの権限設定がされていない
対処方法
1. MySQLを停止させる
$ sudo systemctl stop mysqld2. MySQLの環境変数にオプションを追加
→権限システムを使用しないで起動することが可能になる$ sudo systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"3. MySQLの起動
$ sudo systemctl start mysqld4. MySQLにログイン
$ mysql -u root5. rootユーザーのPasswordを設定
mysql> UPDATE mysql.user SET authentication_string = PASSWORD('設定したいPassword') WHERE User = 'root' AND Host = 'localhost'; mysql> FLUSH PRIVILEGES; mysql> quit以下は環境変数にオプションを追加したのを戻す作業
6. MySQLを停止させる$ sudo systemctl stop mysqld7. MySQLの環境変数にオプションを元に戻す
$ sudo systemctl unset-environment MYSQLD_OPTS8. MySQLの起動
$ sudo systemctl start mysqldつまずきポイント3:Passwordを設定したと思ったらALTER USER statementが使えない
これでようやくPasswordも設定できたと思い、ログインして
CREATE DATABASE
したところまたもエラー発生。ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.原因
rootのパスワードを初回設定から変えていないときに表示される
対処方法
下記コマンドで新しいパスワードを設定する
ALTER USER 'root'@'localhost' IDENTIFIED BY '新しいパスワード';つまずきポイント4:MySQLのパスワードポリシーに怒られる
新しいパスワードを設定する際に例えば
pass
などの小文字4字で設定しようとするとデフォルトの設定ではMySQLのパスワードポリシーに違反してしまいます。ERROR 1819 (HY000): Your password does not satisfy the current policy requirements原因
ポリシー Passwordに必要な条件 0 または LOW 長さ 1 または MEDIUM 長さ; 数字、小文字/大文字、および特殊文字 2 または STRONG 長さ; 数字、小文字/大文字、および特殊文字。辞書ファイル 現在のポリシーは以下のコマンドで確認できます。
mysql> SHOW VARIABLES LIKE 'validate_password%'; +--------------------------------------+-------+ | Variable_name | Value | +--------------------------------------+-------+ | validate_password_check_user_name | OFF | | validate_password_dictionary_file | | | validate_password_length | 8 | | validate_password_mixed_case_count | 1 | | validate_password_number_count | 1 | | validate_password_policy | MEDIUM| | validate_password_special_char_count | 1 | +--------------------------------------+-------+ 7 rows in set (0.00 sec)対処方法
1. Passwordをポリシーに合わせる。
おとなしくMySQLに従う。。2. ポリシーを変更する
-- 最低限の長さの変更 mysql> SET GLOBAL validate_password_length=4; -- ポリシーの変更 mysql> SET GLOBAL validate_password_policy=LOW; -- 変更の確認 SHOW VARIABLES LIKE 'validate_password%'; +--------------------------------------+-------+ | Variable_name | Value | +--------------------------------------+-------+ | validate_password_check_user_name | OFF | | validate_password_dictionary_file | | | validate_password_length | 4 | | validate_password_mixed_case_count | 1 | | validate_password_number_count | 1 | | validate_password_policy | LOW | | validate_password_special_char_count | 1 | +--------------------------------------+-------+ 7 rows in set (0.00 sec)参考文献
AWSのEC2で行うAmazon Linux2(MySQL5.7)環境構築
AWS Amazon Linux2にMySQL5.7を構築する
Change mysql root password on Centos7
MySQL 5.7.16 でERROR 1820 (HY000): You must reset your passwordの対処法(windows用)
Mysql 5.7* パスワードをPolicyに合わせるとめんどくさい件について
- 投稿日:2020-02-20T00:31:05+09:00
ERROR 1045 (28000): Access denied for user 'root'@'%' (using password: YES)となったときの対応方法
- 環境
- MySQL 5.7.28(RDS)
全く関係ないけど気がついた・・・「%」を指定するときは「'(シングルクォーテーション)」で囲むとエラーになる・・・「`(名前がわからない)」で囲むようだ。
事象 : GRANT文でグローバル権限を割り当てたら怒られた
mysql> create user 'ponsuke'@'localhost' identified by 'ponsuke'; Query OK, 0 rows affected (0.20 sec) mysql> grant all on *.* to 'ponsuke'@'localhost'; ERROR 1045 (28000): Access denied for user 'root'@'%' (using password: YES)試行錯誤
権限があるからGRANT文できるはずなのに・・・
mysql> select host,user,select_priv,create_priv,insert_priv,grant_priv,account_locked from mysql.user; +-----------+-----------+-------------+-------------+-------------+------------+----------------+ | host | user | select_priv | create_priv | insert_priv | grant_priv | account_locked | +-----------+-----------+-------------+-------------+-------------+------------+----------------+ | localhost | rdsadmin | Y | Y | Y | Y | N | | localhost | mysql.sys | N | N | N | N | Y | | % | root | Y | Y | Y | Y | N | | localhost | ponsuke | N | N | N | N | N | +-----------+-----------+-------------+-------------+-------------+------------+----------------+ 4 rows in set (0.16 sec) mysql> show grants for 'root'@`%`; +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Grants for root@% | +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO 'root'@'%' WITH GRANT OPTION | +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.15 sec)「`%`.*」にするとエラーにならないけど・・・権限は付与されない・・・
mysql> grant all on `%`.* to 'ponsuke'@'localhost' identified by 'ponsuke'; Query OK, 0 rows affected, 1 warning (0.16 sec) mysql> select host,user,select_priv,create_priv,insert_priv,grant_priv,account_locked from mysql.user; +-----------+-----------+-------------+-------------+-------------+------------+----------------+ | host | user | select_priv | create_priv | insert_priv | grant_priv | account_locked | +-----------+-----------+-------------+-------------+-------------+------------+----------------+ | localhost | rdsadmin | Y | Y | Y | Y | N | | localhost | mysql.sys | N | N | N | N | Y | | % | root | Y | Y | Y | Y | N | | localhost | ponsuke | N | N | N | N | N | +-----------+-----------+-------------+-------------+-------------+------------+----------------+ 4 rows in set (0.15 sec)原因 : RDSでは
GRANT ALL
ができないからRDSではSuper権限が付与されたユーザはAWS側が管理用に確保しているrdsadminというユーザのみになっており、自身で作成したユーザにはSuper権限が付与されていません(付与することもできません)。
[RDS (MySQL)] Super権限操作で出たエラー | ハックノート-- 確かにrdsadminには管理者権限がついている mysql> show grants for 'rdsadmin'@'localhost'; +-------------------------------------------------------------------------+ | Grants for rdsadmin@localhost | +-------------------------------------------------------------------------+ | GRANT ALL PRIVILEGES ON *.* TO 'rdsadmin'@'localhost' WITH GRANT OPTION | +-------------------------------------------------------------------------+ 1 row in set (0.15 sec)対応 : rootと同じ権限を付与していろいろできるようにする
管理者権限ではないけどやりたいことができればいい。
-- root権限を表示してコピーする mysql> show grants for 'root'@`%`; +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | Grants for root@% | +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO 'root'@'%' WITH GRANT OPTION | +---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.16 sec) -- 貼り付けてユーザーの指定を対象のユーザに書き換える mysql> GRANT SELECT, INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, PROCESS, REFERENCES, INDEX, ALTER, SHOW DATABASES, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE, REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER, EVENT, TRIGGER ON *.* TO 'ponsuke'@'localhost' WITH GRANT OPTION; Query OK, 0 rows affected (0.26 sec) -- 権限を確認 mysql> select host,user,select_priv,create_priv,insert_priv,grant_priv,account_locked from mysql.user; +-----------+-----------+-------------+-------------+-------------+------------+----------------+ | host | user | select_priv | create_priv | insert_priv | grant_priv | account_locked | +-----------+-----------+-------------+-------------+-------------+------------+----------------+ | localhost | rdsadmin | Y | Y | Y | Y | N | | localhost | mysql.sys | N | N | N | N | Y | | % | root | Y | Y | Y | Y | N | | localhost | ponsuke | Y | Y | Y | Y | N | +-----------+-----------+-------------+-------------+-------------+------------+----------------+ 4 rows in set (0.15 sec) mysql>