Saya menggunakan docker-compose untuk membuat mysql wadah. Saya mendapatkan IP host 172.21.0.2.Tapi ketika saya menghubungkan mysql. Saya mendapatkan kesalahan:
Anda dapat melewati variabel lingkungan tambahan ketika memulai wadah MySQL MYSQL_ROOT_HOST=<ip> ini akan membuat pengguna root dengan izin untuk login dari alamat IP yang diberikan. Dalam kasus di mana Anda ingin mengizinkan login dari IP Anda dapat menentukan MYSQL_ROOT_HOST=%.
Ini akan bekerja hanya untuk wadah yang baru dibuat.
Saat memutar wadah baru:
docker run --name some-mysql -e MYSQL_ROOT_HOST=% -e MYSQL_ROOT_PASSWORD=my-secret-pw -d mysql:latest
Dalam compose file itu akan menjadi:
version: '2'services: ### Mysql container mysql: image: mysql:latest ports: - "3306:3306" volumes: - /var/lib/mysql:/var/lib/mysql environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: test_db MYSQL_USER: test MYSQL_PASSWORD: test_pass MYSQL_ROOT_HOST: '%' # needs to be enclosed with quotes
Ketika Anda terhubung ke server MySQL, ia memeriksa itu GRANT tabel (tabel "pengguna" di " mysql| database Pada server MySQL) terhadap alamat IP dari Mesin klien MySQL yang menghubungkan. Jika ada TIDAK ADA ENTRI YANG COCOK di kolom "host" di tabel "pengguna" di database " mysql, MySQL akan segera menutup koneksi dengan ERROR 1130.
Periksa apakah klien mampu untuk mendapatkan ke port 3306 (Port MySQL) pada database server:
telnet 172.21.0.2 3306Trying ::1...Connected to 172.21.0.2.Escape character is '^]'.
Anda harus masuk ke server MySQL, dan menjalankan "mysql" untuk memeriksa tabel grants:
"root" adalah berwenang untuk menghubungkan dari beberapa alamat IP, tetapi tidak dari klien IP 172.21.0.1. Jadi, tambahkan saja GRANT access dari IP itu:
mysql> GRANT ALL PRIVILEGES ON root.* TO 'your_db'@'172.21.0.1' IDENTIFIED BY 'Password';Query OK, 0 rows affected (0.00 sec)mysql> FLUSH PRIVILEGES;Query OK, 0 rows affected (0.00 sec)