Database/MySQL, MariaDB

Mysql 계정 정보 복사, 이전 (DB 마이그레이션 시)

BabyTT 2023. 3. 8. 17:21

pt-show-grants를 사용하지 않더라도 
아래 스크립트를 .sh 로 생성하여 실행하면 비밀번호와 grant 옵션을 얻을 수 있음

#!/bin/bash

HOST=localhost
USER=
PASSWORD=

for i in `mysql -Ns -h$HOST -u$USER -p$PASSWORD -e "select concat('\'',user,'\'@\'',host,'\'') from mysql.user where user not in ('mysql.session','mysql.sys','debian-sys-maint','root','mysql');"`
do
mysql -Ns -h$HOST -u$USER -p$PASSWORD -e 'SHOW CREATE USER '"$i"';' >> users.sql
mysql -Ns -h$HOST -u$USER -p$PASSWORD -e 'SHOW GRANTS FOR '"$i"';' >> users.sql
done

sed -i 's/$/\;/' user_privileges.sql

 
-- 패스워드 명을 알 경우
ALTER USER '계정명'@'%' IDENTIFIED with mysql_native_password by '비밀번호';
 
-- 패스워드 명을 모르고 기존 DB의 패스워드를 그대로 복사해서 가져올 경우 
ALTER USER '계정명'@'%' IDENTIFIED with mysql_native_password AS 'mysql.user테이블에 있던 비밀번호 그대로';
 
-- 적용
FLUSH PRIVILEGES;
 
-- 권한 확인
SHOW GRANTS FOR 계정명;
 
 
참고!
MySql5.7 은 계정 생성과 동시에 DB에 권한을 부여 가능
mysql> grant all privileges on DB이름.* to '계정명'@'%' identified by '비밀번호' with grant option;   
 
MySQL 8 부터는 계정 생성과 DB 권한 부여를 각각 실행
mysql> create user '계정명'@'%' identified by '비밀번호' ;
mysql> grant all privileges on DB이름.* to '계정명'@'%' with grant option;