MySQL ile kullanıcı ayrıcalıkları nasıl kopyalanır?


12

Yeni bir MySQL kurulumuna geçmem gereken birçok veritabanı ve kullanıcı içeren bir MySQL kurulumum var. Vermek için phpMyAdmin sonra veritabanlarını / tabloları almak için kullanabilirsiniz, ancak kullanıcıları ve izinleri taşımak için hiçbir şey bilmiyorum. Bunu nasıl kolayca yapabilirim?

Yanıtlar:


17

Bunun gibi bir komut dosyası, kullanıcı hesaplarını yeniden oluşturmak için kullanmanız gereken bir dizi hibe beyanı yazdırmak için mysql cli istemcisini kullanır. Bu komut en iyi şekilde çalışır. Veritabanı kimlik bilgilerinizde .my.cnf

#!/bin/bash
# adapted from (http://www.pyrosoft.co.uk/blog/2006/10/18/show-grants-for-all-users-on-mysql/)
(
 mysql --batch --skip-column-names -e "SELECT user, host FROM user" mysql 
) | while read user host
do
  echo "# $user @ $host"
  mysql --batch --skip-column-names -e"SHOW GRANTS FOR '$user'@'$host'"
done

MySQL'in bir sürümünden diğerine atlıyorsanız, bunu mysql veritabanının basit bir dökümü yerine kullanmak isteyebilirsiniz. Mysql veritabanının şeması zaman zaman güncellenir.

Bu, ortadan kaldırmak istediğiniz bir cruft varsa, yeniden oluşturmak istediğiniz hesapları seçmenize ve seçmenize de olanak tanır.


Son zamanlarda readIFS varsayılan olarak bir ayırıcı olarak boşluk karakteri içerdiğinden, kafasında karışık adlar içeren bir kullanıcı üzerinde kullanıyordum . Sistem garip kullanıcı adlarında daha iyi iş gibi görünen yeni ve geliştirilmiş komutum.

IFS=$'\t'; while read user host; do
  echo "user:$user host:$host"
  mysql --batch --skip-column-names -e"SHOW GRANTS FOR '$user'@'$host'"
  echo ""
done < <(mysql --batch --skip-column-names -e "SELECT user, host FROM mysql.user")

3

Bu, SHOW GRANTS;her kullanıcı için bir dosya oluşturur .

Ardından, her kullanıcının yankısını SHOW GRANTS;ve her satıra noktalı virgül ekleyin.

MYSQL_CONN="-uroot -prootpassword"
SQLSTMT="SELECT CONCAT('SHOW GRANTS FOR ''',user,'''@''',host,''';')"
SQLSTMT="${SQLSTMT} FROM mysql.user WHERE user<>''"
mysql ${MYSQL_CONN} -ANe"${SQLSTMT}" > /tmp/ShowGrants.sql
mysql ${MYSQL_CONN} -ANe < /tmp/ShowGrants.sql | sed 's/$/;/g' > MySQLUserGrants.sql
rm -f /tmp/ShowGrants.sql

Aynı şeyi yapmak için bu araçları da indirebilir ve kullanabilirsiniz:

Bir şans ver !!!


2

mysqlVeritabanını yedekleyerek ve geri yükleyerek bu verileri taşıyabilmeniz gerektiğine inanıyorum .


Özellikle mysql.user tablosu
Coops

2
Her iki MySQL örneğinin aynı ana sürümü çalıştırdığından emin olmanız gerekir, aksi takdirde hedef MySQL sunucusuyla birlikte verilen yükseltme komut dosyalarını çalıştırmanız gerekir.
Maxwell
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.