Pada kondisi tertentu, Anda mungkin diminta untuk memindahkan website beserta database ke server lain. Tantangan yang sering muncul adalah harus membuat ulang setiap user MySQL, terutama jika di server lama terdapat banyak website atau aplikasi dengan user dan database yang berbeda-beda.
Berikut beberapa cara yang dapat Anda lakukan untuk memindahkan user MySQL ke server baru.
Mengedit authentication_string
#
Cara pertama adalah dengan menyalin dan menyamakan nilai authentication_string dari server lama ke server baru.
Misalnya, pada server lama terdapat user bob:
mysql> USE mysql;
mysql> SELECT user, host, authentication_string
FROM user
WHERE user='bob';
+------+-----------+-------------------------------------------+
| user | host | authentication_string |
+------+-----------+-------------------------------------------+
| bob | % | *61584B76F6ECE8FB9A328E7CF198094B2FAC55C7 |
| bob | localhost | *61584B76F6ECE8FB9A328E7CF198094B2FAC55C7 |
+------+-----------+-------------------------------------------+
2 rows in set (0.00 sec)
Langkah di server baru:
CREATE USER 'bob'@'localhost';
UPDATE mysql.user
SET authentication_string='*61584B76F6ECE8FB9A328E7CF198094B2FAC55C7'
WHERE user='bob';
FLUSH PRIVILEGES;
⚠️ Catatan:
- Pastikan versi MySQL sama atau kompatibel.
- Pada MySQL versi terbaru (8.x), struktur tabel
mysql.userbisa berbeda.- Metode ini tidak selalu direkomendasikan untuk produksi karena perubahan langsung pada tabel sistem berisiko.
Export Tabel user dan db
#
Cara kedua adalah mengekspor tabel yang menyimpan data user dan hak akses.
Di server lama jalankan:
mysqldump -t mysql user > user.sql
mysqldump -t mysql db > db.sql
Transfer file user.sql dan db.sql ke server baru, lalu import:
mysql mysql < user.sql
mysql mysql < db.sql
Terakhir, jalankan perintah berikut di MySQL:
FLUSH PRIVILEGES;
⚠️ Catatan:
- Pastikan versi MySQL sama atau kompatibel.
- Cara ini berisiko jika struktur tabel sistem berbeda antar versi.
- Sebaiknya lakukan backup sebelum proses import.
Export User Menggunakan Script (Direkomendasikan) #
Metode ini lebih aman karena menggunakan perintah resmi MySQL seperti SHOW CREATE USER dan SHOW GRANTS.
1. Ambil daftar user #
mysql -u root -p -N -e \
"SELECT CONCAT(\"'\", user, \"'@'\", host, \"'\")
FROM mysql.user" > users.list
> users_grants.sql
while read uh; do
# CREATE USER
mysql -u root -p -e "SHOW CREATE USER $uh" >> users_grants.sql
echo "" >> users_grants.sql
# GRANTS
mysql -u root -p -e "SHOW GRANTS FOR $uh" >> users_grants.sql
echo "" >> users_grants.sql
done < users.list
Setelah file users_grants.sql terbentuk, pindahkan ke server baru dan jalankan:
mysql -u root -p < users_grants.sql
✅ Kelebihan metode ini:
- Lebih aman
- Tidak menyentuh langsung tabel sistem
- Kompatibel untuk migrasi antar versi MySQL (dengan penyesuaian kecil)