20200220のMySQLに関する記事は11件です。

さくら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/mysql

MySQLのレポジトリを追加

https://dev.mysql.com/downloads/repo/yum/
こちらからダウンロードしたいバージョンなどを確認する。
今回はMySQL8.0を選択。

sudo yum localinstall http://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm

MySQLのインストールとバージョンの確認

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.service

MySQLへログイン

 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

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Railsで投稿した内容をGoogleMap上にmarkerで表示させる方法

はじめに

世界中の絶景を投稿できるアプリが作れます。
マップの表示方法はGoogleMapsAPIを使いました。
投稿した内容から自動的に軽度と緯度を取得してGoogleMapsAPIのマップ上に表示させます。
完成形はこんな感じ
スクリーンショット 2020-02-20 19.32.20.png

環境

  • Ruby 2.5.1
  • Rails 5.2.3
  • MySQL 5.6

目次

  • GoogleMapsAPIのKEYを取得
  • 簡単なアプリを作成しとりあえずGoogleMapsをアプリ上に表示させる
  • 投稿機能を作り軽度、緯度取得し、マップ上に表示

GoogleMapsのKEYを取得

(グーグルアカウントにログインしてから始めてください)
まずGoogle Map PlatformからKEYを取得します
スクリーンショット 2020-02-20 15.25.11.png

使ってみるを選択。
スクリーンショット 2020-02-20 15.28.16.png

全て選択し続行。
プロジェクト名はなんでもいいですが今回はMyProjectを選択
支払い方法を入力します。
topページに移動しますので下の方のMaps Platfomを選択
スクリーンショット 2020-02-20 15.40.51.png

Maps JavaScript APIを選択し有効を押します

スクリーンショット 2020-02-20 15.42.15.png

スクリーンショット 2020-02-20 15.47.16.png

画面上にあるAPI とサービスの認証情報

スクリーンショット 2020-02-20 15.48.21.png

認証情報を作成を選択しAPIを作成。
画面にでてくるのがAPIキーになるので保存しといてください。(必要な場合はキーの制限をしてください)

簡単なアプリを作成しgooglemapをアプリ上に表示させる

アプリ名はここではgmapにします
ここの部分は自分のアプリ名にしてください。
まずアプリの雛形とデータベース設計します

ターミナル上で

rails _5.2.3_ new gmap -d mysql
cd gmap
rails g controller maps
rails db:create
rails db:migrate

erbになっているのでhamlに変換します。
ここは任意で大丈夫です。
erbをhamlに簡単に変えてくれるサイトです

Gemfile
gem "haml-rails", ">= 1.0", '<= 2.0.1'
bundel install
rails haml:erb2haml

マップを表示させます
rails5.2以上なので今回はcredentialsを使います

routes.rb
Rails.application.routes.draw do
  root to: "maps#index"
end
views/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:edit
GOOGLE_MAP_KEY: MyAPIKey

MyAPIKeyの部分は先ほど取得したkeyを入力してください
これで一応マップ表示ができたと思います!
スクリーンショット 2020-02-20 18.00.34.png

投稿機能を作り軽度、緯度取得

まずは投稿機能を作るためにpostsのviewとcontroller,modelを作ります。

rails g scaffold posts name:string description:string latitude:float longitude:float
rake db:migrate

表示をgmaps4railsのgemを使って表示する方法に変えます。

Gemfile
gem '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.rb
class 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
end

marker.infowindow post.descriptionのところに表示させたいカラムを変えれば表示内容を変えれます。
今回はdescriptionにします。

これでマーカーが立つようになりました。
あとは新規投稿で軽度、緯度を取得できるようにします

gem 'geocoder'
post.rb
class 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の項目を消します。
これで完成です!

最後に

間違っているところがあったら教えてください…

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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=production

seedも反映させたい場合

ターミナル
[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ができなかったのですが、上記の方法で一応解決できました。
自分が忘れないように記録しました。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

We're sorry, but something went wrong.

We're sorry, but something went wrong.

image.png

このエラーはサーバーのエラーが多いのでエラーコードを見にいきましょう。
まず、サーバーにログインしましょう。
スクリーンショット 2020-02-20 11.34.30.png

実行してるフォルダにいきましょう

 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

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

EC2の本番環境DBをMySQLで削除する方法

本番環境のDBをいじる方法を紹介します。

まず、サーバーサイドにつなぎましょう。
スクリーンショット 2020-02-20 11.34.30.png

次にmysqlにログインしましょう。

mysql -u root -p

ログイン時はパスワードを求められるので入力しましょう。

この画面が出たら成功です!

mysql> 

まず、データベースの中をみてみましょう。

mysql> show databases;

スクリーンショット 2020-02-20 11.43.04.png

データベースを選択します。

mysql> use freemarket_sample_60b_production;

データベースの中にあるテーブルをみてみましょう。

mysql> show tables;

スクリーンショット 2020-02-20 12.43.43.png

次は削除したいテーブルを選びましょう。

mysql> select * from items;

スクリーンショット 2020-02-20 12.57.32.png

今回は、itemsテーブルの ID=4 を消したいと思います。

mysql> delete from items where id='4';

もう一度確認して見ましょう。

mysql> select * from items;

スクリーンショット 2020-02-20 12.57.11.png

これで完了です!

おまけ

typeカラムのテキストタイプを削除

mysql> delete from items where type='text';

全テーブル削除

mysql> delete form items;
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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.utf8

MySQL(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)
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Laravel DB.com ” New!! チーム共有機能 ”

Laravel DB.com ってなに?

Laravel DB.com ってなに?前回の紹介記事です!
https://qiita.com/daisu_yamazaki/items/068595670bdc2b6fe3fc

New「チーム共有機能」

シェア機能のことです。

「シェアData 送信側」

1. [シェアData]作成

2. [シェアData]IDをコピー

ここでコピーしたIDを相手に知らせます。

「シェアData 受信側」

1.[シェアData]読み込み

相手は送られてきた[シェアData]IDを貼り付けます。

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

以上

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【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をコピー

ここでコピーした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

以上

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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> 
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

文系出身エンジニアが学ぶ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 mysqld

2. MySQLの環境変数にオプションを追加
→権限システムを使用しないで起動することが可能になる

$ sudo systemctl set-environment MYSQLD_OPTS="--skip-grant-tables"

3. MySQLの起動

$ sudo systemctl start mysqld

4. MySQLにログイン

$ mysql -u root

5. 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 mysqld

7. MySQLの環境変数にオプションを元に戻す

$ sudo systemctl unset-environment MYSQLD_OPTS

8. 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に合わせるとめんどくさい件について

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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> 
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む