🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
MySQL

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Docker

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

Q&A

解決済

1回答

1450閲覧

dockerで動かしているMySQLへ接続ができない

退会済みユーザー

退会済みユーザー

総合スコア0

MySQL

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

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Docker

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

0グッド

0クリップ

投稿2021/02/08 10:32

編集2021/02/08 18:05

Dockerで動かしているMySQLに接続ができず、以下エラーが表示されてしまいます
MYSQLのバージョンは5.7.3
PHPは5.16かと思われます

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

Severity: Warning Message: mysqli::real_connect(): (HY000/1045): Access denied for user 'testuser'@'172.18.0.15' (using password: YES) Filename: mysqli/mysqli_driver.php Line Number: 202

ソースコード

mysqli/mysqli_driver.php Line Number: 202は以下のようになっております

if ($this->_mysqli->real_connect($hostname, $this->username, $this->password, $this->database, $port, $socket, $client_flags)) { // Prior to version 5.7.3, MySQL silently downgrades to an unencrypted connection if SSL setup fails if ( ($client_flags & MYSQLI_CLIENT_SSL) && version_compare($this->_mysqli->client_info, '5.7.3', '<=') && empty($this->_mysqli->query("SHOW STATUS LIKE 'ssl_cipher'")->fetch_object()->Value) ) { $this->_mysqli->close(); $message = 'MySQLi was configured for an SSL connection, but got an unencrypted connection instead!'; log_message('error', $message); return ($this->db->db_debug) ? $this->db->display_error($message, '', TRUE) : FALSE; } return $this->_mysqli; } return FALSE; }

その他
docker-compose.yml

version: '2' services: db_data: image: busybox volumes: - /var/lib/mysql mysql: build: ./config/mysql/ command: mysqld --character-set-server=utf8 --collation-server=utf8_general_ci environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: "localdb" MYSQL_USER: "localuser" MYSQL_PASSWORD: "root" TZ: "Asia/Tokyo" ports: - "3306:3306" volumes: - ./sql:/docker-entrypoint-initdb.d volumes_from: - db_data container_name: local_mysql56_cc networks: default: external: name: common_link

DB_Driver.php(恐らくDB接続については、ここで設定しているかと思われます。かなり長文のため、最初のinitalizeのみ抜粋)

abstract class CI_DB_driver { /** * Data Source Name / Connect string * * @var string */ public $dsn; /** * Username * * @var string */ public $username; /** * Password * * @var string */ public $password; /** * Hostname * * @var string */ public $hostname; /** * Database name * * @var string */ public $database; /** * Database driver * * @var string */ public $dbdriver = 'mysqli'; /** * Sub-driver * * @used-by CI_DB_pdo_driver * @var string */ public $subdriver; /** * Table prefix * * @var string */ public $dbprefix = ''; /** * Character set * * @var string */ public $char_set = 'utf8'; /** * Collation * * @var string */ public $dbcollat = 'utf8_general_ci'; /** * Encryption flag/data * * @var mixed */ public $encrypt = FALSE; /** * Swap Prefix * * @var string */ public $swap_pre = ''; /** * Database port * * @var int */ public $port = ''; /** * Persistent connection flag * * @var bool */ public $pconnect = FALSE; /** * Connection ID * * @var object|resource */ public $conn_id = FALSE; /** * Result ID * * @var object|resource */ public $result_id = FALSE; /** * Debug flag * * Whether to display error messages. * * @var bool */ public $db_debug = FALSE; /** * Benchmark time * * @var int */ public $benchmark = 0; /** * Executed queries count * * @var int */ public $query_count = 0; /** * Bind marker * * Character used to identify values in a prepared statement. * * @var string */ public $bind_marker = '?'; /** * Save queries flag * * Whether to keep an in-memory history of queries for debugging purposes. * * @var bool */ public $save_queries = TRUE; /** * Queries list * * @see CI_DB_driver::$save_queries * @var string[] */ public $queries = array(); /** * Query times * * A list of times that queries took to execute. * * @var array */ public $query_times = array(); /** * Data cache * * An internal generic value cache. * * @var array */ public $data_cache = array(); /** * Transaction enabled flag * * @var bool */ public $trans_enabled = TRUE; /** * Strict transaction mode flag * * @var bool */ public $trans_strict = TRUE; /** * Transaction depth level * * @var int */ protected $_trans_depth = 0; /** * Transaction status flag * * Used with transactions to determine if a rollback should occur. * * @var bool */ protected $_trans_status = TRUE; /** * Transaction failure flag * * Used with transactions to determine if a transaction has failed. * * @var bool */ protected $_trans_failure = FALSE; /** * Cache On flag * * @var bool */ public $cache_on = FALSE; /** * Cache directory path * * @var bool */ public $cachedir = ''; /** * Cache auto-delete flag * * @var bool */ public $cache_autodel = FALSE; /** * DB Cache object * * @see CI_DB_cache * @var object */ public $CACHE; /** * Protect identifiers flag * * @var bool */ protected $_protect_identifiers = TRUE; /** * List of reserved identifiers * * Identifiers that must NOT be escaped. * * @var string[] */ protected $_reserved_identifiers = array('*'); /** * Identifier escape character * * @var string */ protected $_escape_char = '"'; /** * ESCAPE statement string * * @var string */ protected $_like_escape_str = " ESCAPE '%s' "; /** * ESCAPE character * * @var string */ protected $_like_escape_chr = '!'; /** * ORDER BY random keyword * * @var array */ protected $_random_keyword = array('RAND()', 'RAND(%d)'); /** * COUNT string * * @used-by CI_DB_driver::count_all() * @used-by CI_DB_query_builder::count_all_results() * * @var string */ protected $_count_string = 'SELECT COUNT(*) AS '; // -------------------------------------------------------------------- /** * Class constructor * * @param array $params * @return void */ public function __construct($params) { if (is_array($params)) { foreach ($params as $key => $val) { $this->$key = $val; } } log_message('info', 'Database Driver Class Initialized'); } // -------------------------------------------------------------------- /** * Initialize Database Settings * * @return bool */ public function initialize() { /* If an established connection is available, then there's * no need to connect and select the database. * * Depending on the database driver, conn_id can be either * boolean TRUE, a resource or an object. */ if ($this->conn_id) { return TRUE; } // ---------------------------------------------------------------- // Connect to the database and set the connection ID $this->conn_id = $this->db_connect($this->pconnect); // No connection resource? Check if there is a failover else throw an error if ( ! $this->conn_id) { // Check if there is a failover set if ( ! empty($this->failover) && is_array($this->failover)) { // Go over all the failovers foreach ($this->failover as $failover) { // Replace the current settings with those of the failover foreach ($failover as $key => $val) { $this->$key = $val; } // Try to connect $this->conn_id = $this->db_connect($this->pconnect); // If a connection is made break the foreach loop if ($this->conn_id) { break; } } } // We still don't have a connection? if ( ! $this->conn_id) { log_message('error', 'Unable to connect to the database'); if ($this->db_debug) { $this->display_error('db_unable_to_connect'); } return FALSE; } } // Now we set the character set and that's all return $this->db_set_charset($this->char_set); }

試したこと

GRANT ALL ON test* to ‘testuser’@‘%’ IDENTIFIED BY ‘root’; でユーザー作成

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

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

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

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

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

AbeTakashi

2021/02/08 12:34 編集

Dockerの環境やPHP、MySQLのバージョン、あとDBに接続しているPHPのソースコード部分などを明記された方が良いと思います。Access denied for userですのでMySQLのユーザー、権限まわりでエラーが出ているのはほぼ明白ですが、これらの情報が不足なためエラーの理由が推測しにくいかと思います。
退会済みユーザー

退会済みユーザー

2021/02/09 00:57

こちら、追記修正行いました
AbeTakashi

2021/02/09 01:44

材料が揃ってきてはいるのですが、現状であやしいところは私自身では見つけられません。MySQLへの接続処理をご自身がどこかで書いてると思うのですが、そのソースが一番みたいところでした。おそらくエラーメッセージから接続まではできていると思うので、Dockerまわりが原因の可能性は低そうではあります。PHPのバージョンがかなり古いのと、パスワードが’root’とかなり簡単な文字列になっているのが気になりますが、これが原因かはわかりません(MySQLの新しいバージョンではこのようなパスワードはデフォルトでは受け付けないはず)。あとはMySQLのコンテナに入るなどしてMySQLクライアントでログインして select user,host from mysql.user; と叩くとどういう表示が返ってくるかを明記されるとユーザ情報がでるので何かが分かるかもしれません。
ockeghem

2021/02/09 06:30

PHPのバージョンに5.16というものはないので、5.1.6(古すぎますが)か、ひょっとすると、5.6でしょうか?
退会済みユーザー

退会済みユーザー

2021/02/09 10:14

こちら自己解決しました。お手数お掛け致しました。
guest

回答1

0

ベストアンサー

こちら自己解決しました。database.phpの設定通りのうまく作られていなかったことが原因でした。お手数お掛け致しました。

投稿2021/02/09 10:14

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問