質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

Q&A

解決済

2回答

3817閲覧

Docker CentOS7 MySQL rootのPW設定とユーザー作成

suvera

総合スコア106

CentOS

CentOSは、主にRed Hat Enterprise Linux(RHEL)をベースにした、フリーのソフトウェアオペレーティングシステムです。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

Docker

Dockerは、Docker社が開発したオープンソースのコンテナー管理ソフトウェアの1つです

0グッド

0クリップ

投稿2016/08/30 09:46

編集2016/08/30 12:53

###前提・実現したいこと
Docker の CeontOS7 のイメージから作成したコンテナにMySQLをインストールしました。
これをDBとして仮運用し、外部からも接続できるようにしたいです。

外部から扱うためにユーザーを作成しようと思った段階で躓いています。
rootのパスワードは設定したものになっていてそれでmysqlに入ることができます。
ですが新しいユーザーを作ることろでエラーが出ています。

###発生している問題・エラーメッセージ

下記のシェルスクリプトを実行した時のエラー

-== Complete Install ==- mysqld Ver 5.7.14 for Linux on x86_64 (MySQL Community Server (GPL)) mysql: [Warning] Using a password on the command line interface can be insecure. Please use --connect-expired-password option or invoke mysql in interactive mode. [root@6034835b0dda /]#

mysqlUserSetting.sqlの実行行をコメントアウトしてシェルスクリプトを実行し、
手動でmysqlにrootで入ってユーザーを作成しようとすると以下のようになりました。

[root@5b3fbe7c80df /]# mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.7.14 Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved. 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> CREATE USER mysqluser; ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement. mysql>

###該当のソースコード

コンテナは以下のように作成しました。
$ docker run --privileged -d -P -i -t -p 3306:3306 --name db_server -v ホストパス:/app_db centos /sbin/init

接続は以下のように行っています。
$ docker exec -it db_server /bin/bash

コンテナ作成後、接続して/app_db以下に入っているシェルスクリプトを実行しています。

#!/bin/sh # vim yum -y install vim-enhanced # mysql yum -y localinstall http://dev.mysql.com/get/mysql57-community-release-el7-7.noarch.rpm yum info mysql-community-server yum -y install mysql-community-server systemctl enable mysqld.service systemctl restart mysqld echo " -== Complete Install ==-" mysqld --version # Allow access without pw to mysql echo 'skip-grant-tables' >> /etc/my.cnf systemctl restart mysqld.service mysql -u root < /cha_db/mysqlResetRootPw.sql # del last line (skip-grant-tables) sed -i -e '$d' /etc/my.cnf systemctl restart mysqld.service mysql -u root -pdevmysql < /app_db/mysqlUserSetting.sql

mysqlResetRootPw.sqlの中身

SQL

1use mysql 2UPDATE user SET authentication_string=password('devmysql') WHERE user='root'; 3flush privileges;

mysqlUserSetting.sqlの中身

SQL

1CREATE USER mysqluser; 2CREATE USER mysqluser IDENTIFIED BY [PASSWORD] 'devmysql'; 3SELECT user,host FROM mysql.user;

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/08/30 10:52

そのsqlだとパスワードは42桁固定の16進数でないといけなかった気がする
suvera

2016/08/30 13:14 編集

mysqlResetRootPw.sqlのパスワードを変更してみましたが効果はありませんでした。 以下の一文が変更したものです。 UPDATE user SET authentication_string=password('01D91A7A869FB2AA3E9906C9B8ACB94DCDB46E3308') WHERE user='root';
guest

回答2

0

自己解決

MySQLのContainerイメージを利用して作ることにしました。

投稿2016/09/02 01:21

suvera

総合スコア106

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

mysql 5.7 を普通にインストールすると root の初期パスワードは初回ログイン後に変更する必要があったような気がします。

root のパスワードを上書きするときに user テーブルの password_expired も更新してみたらどうなるでしょうか?


あるいは mysql のインストール後の初回起動前に下記を実行しておけば、その辺りのもろもろの面倒がなくなります。

mysqld --initialize-insecure --user mysql

もしかしたら下記だったかもしれません。

mysqld --initialize --initialize-insecure --user mysql

これをすると mysql が非セキュアに初期化されるので root の初期パスワードは空だし、初回ログイン後もそのまま使い続けることができます、たしか。

投稿2016/08/30 11:09

編集2016/08/30 11:16
ngyuki

総合スコア4514

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ngyuki

2016/08/30 12:25

`systemctl mysqld` ではなく `mysqld` です。もしパスが通っていないようであれば `/usr/sbin/mysqld` とかです。
suvera

2016/08/30 12:53

/usr/sbin/mysql は見つかりました。 mysqld はなかったです。 /usr/sbin/mysql --help を実行して -u, --user=name User for login if not current user. こちらは見つかりました。 ただ、--initialize-insecureは見つかりませんでした。 ini で検索をかけて引っかかったのは以下のものだけでした。 --init-command=name SQL Command to execute when connecting to MySQL server. Will automatically be re-executed when reconnecting.
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問