MySql users export

Ismertek valami egyszerű parancssoros linux scriptet, amivel mysql felhasználókat és jogosultságaikat lehetne exportálni?

A legtöbb helyen a mysql.user és mysql.db táblák mentését ajánlják, de én olyat keresnék, ami például szabványos mysql create és grant pranacsokként menti le az aktuális user és db táblák tartalmát, a mysqldump kimenetéhez hasonlóan. Így például egy másik, már más usereket tartalmazó rendszerbe is könnyen lehetne importálni azokat.

Hozzászólások

"mysqldump kimenetéhez hasonlóan"

Miért nem használod akkor magát a mysqldumpot? Megadhatod neki hogy csak ezt a két táblát dumpolja.

Mert ő olyat szeretne, amit rá lehet tölteni egy másik, már működő SQL szerverre anélkül, hogy ott ID és egyéb ütközésket okozna. Magyarul: nem CREATE TABLE és INSERT parancsokat szeretne, hanem CREATE USER és GRANT parancsokat.

A Google hirtelen az alábbi hasznos ötleteket dobta ki:

https://serverfault.com/questions/8860/how-can-i-export-the-privileges-…

https://www.thegeekdiary.com/mysql-how-to-backup-user-privileges-as-cre…

Amennyiben MySQL 5.7+ verziót használ (és nem pl. MariaDB-t), akkor érdekes lehet még a mysqldump --user opciója.

Úgy tűnik, kompakt megoldás nincs rá, mindenképpen egy kis scriptet kell írnom, ráadásul nem is működhet úgy, hogy csak CREATE USER és GRANT parancsok lesznek a kimenetben, mivel a jelszavak elkódolva tárolódnak. Emiatt - most úgy tűnik - a CREATE USER után majd kell egy UPDATE is, ami az elkódolt jelszót beleírja a mysql.user tábla megfelelő sorába.

Valóban mariadb-t használok, de a --user paraméterről úgy tudtam, az a hozzáférő felhasználót definiálja. Így hirtelen, nem látom, ebben a problémában mit segíthet.

talán nem profi megoldás, de phpmyadminnal tudsz egy sql fájlt exportálni, amiben a felhasználók és a jogaik vannak, azt pedig nyugodtan importálhatod egy másik DB-re (előtte kézzel szoktam kigyomlálni a már szükségtelen usereket/jogokat)

Én korábban az alábbi scriptet írtam erre, de most nézve a kimenetet lehet még nem 100%-os :)

#!/bin/bash

declare MYSQL_PASSWORD=$1
declare MYSQL_USER=root
declare DIR=/backup/mysql
declare WHERE="WHERE user NOT LIKE 'mysql.%' AND user <> 'root' AND user <> 'debian-sys-maint'"
declare SELECT_USERS="SELECT CONCAT('DROP USER IF EXISTS \'', user, '\'@\'', host, '\'; ', 'CREATE USER \'', user, '\'@\'', host, '\' IDENTIFIED BY PASSWORD \'', authentication_string, '\';' ) FROM mysql.user $WHERE;"
declare SELECT_GRANTS="SELECT CONCAT('SHOW GRANTS for ','\'',user,'\'@\'',host,'\'') FROM mysql.user $WHERE;"

/usr/bin/mysql --user=$MYSQL_USER --password=$MYSQL_PASSWORD -sNe "$SELECT_USERS" > $DIR/_users.sql
/usr/bin/mysql --user=$MYSQL_USER --password=$MYSQL_PASSWORD -sNe "$SELECT_GRANTS" > $DIR/_users_grants.txt

echo '' >> $DIR/_users.sql

while read GRANT
do
	/usr/bin/mysql --user=$MYSQL_USER --password=$MYSQL_PASSWORD -e "$GRANT" | sed 's/$/;/g' >> $DIR/_users.sql
done < $DIR/_users_grants.txt

echo '' >> $DIR/_users.sql
echo 'FLUSH privileges;' >> $DIR/_users.sql

rm -f $DIR/_users_grants.txt

Aktivan mysql-ezek, de en is mindig tanulok. Epp tegnap futottam bele egy adatbazis masolasba, amire meg nincs automatikus full megoldas. Alapbol dump nem rakja ki a tarolt eljarasokat. Kapcsoloval kirakja, de a definer reszt utolag torolni kell belole hogy mas adatbazis néven importalni lehessen.

Az user pont ilyen, nem az adatbazis része, inkabb a kornyezete. Van ahol az user (es a pass is!) ugyanaz mint az adatbazis (grrrr), de ott sem trivialis hogy @localhost vagy @% a vege. Szoval jellegét tekintve nincs mysql alatt olyan .sql fajl ami egy friss szerver telepites utan az alkalmazashoz szukseges _mindent_ automatkisan beallit. Sztem. 

@BCsabaEngine

Fentebb írtam, hogy megoldható, most mutatok egy példát, phpmyadmin -> felhasználói fiókok -> tetszőleges felhasználó(k) kijelölése -> exportálás és íme az eredmény, amit az új (vagy másik) szerveren csak le kell futtatni SQL konzolban:

# `zabbix`@`localhost` jogosultságai

GRANT SELECT ON *.* TO 'zabbix'@'localhost' IDENTIFIED BY PASSWORD '*5F6CBB28FE48518718578A4D26E8B6A7F04D1913';

GRANT ALL PRIVILEGES ON `zabbix`.* TO 'zabbix'@'localhost';

Pár éve az új szerverre is így migráltam a felhasználókat és a jogaikat.