You are here

Перенос баз данных и пользователей на другой сервер MySQL

Скрипт, которым можно слить все базы в отдельные дампы:

#!/bin/sh
#backup databases
#Usage: 
#dbbackup  - backup all databases
#dbbackup dbname - backup single database
 
SINGLE_BASE="1"
DBNAME=$*
DBUSER="root"
DBPASS="пароль_root"
DBHOST="localhost"
DIR="./"
TIMENAME=`date +%Y-%m-%d-%H%M`
LOG="mysql_dump.log"
mkdir -p ${DIR}/${TIMENAME}
touch $LOG
 
if [ "${DBNAME}" = "" ]; then
	DBASES=`mysql -u${DBUSER} -h ${DBHOST} -p${DBPASS} -Bse 'show databases'`
	for DBNAME in $DBASES; do
		TIMEDUMP=`date '+%T %x'`
		echo "backup has been done at $TIMEDUMP : $TIMENAME on db: $n" >> $LOG
		mysqldump -u${DBUSER} -h ${DBHOST} -p${DBPASS} ${DBNAME} > "$DIR/${TIMENAME}/${DBNAME}.sql" 
	done
	SINGLE_BASE="0"
fi
 
if [ "${SINGLE_BASE}" = "1" ]; then
	mysqldump -u${DBUSER} -h ${DBHOST} -p${DBPASS} ${DBNAME} > "$DIR/${TIMENAME}/${DBNAME}.sql" 
fi

Скрипт, которым можно слить всех пользователей с правами. Перенаправить вывод в файл, получатся SQL запросы для создания юзеров на другом сервере:

#!/bin/sh
#Экспорт SQL запросов создания привилегий для всех юзеров. Перенаправить в файл. 
SUPERUSER="$1"
SUPERPASS="$2"
 
 
SAVEIFS=$IFS
IFS='
'
 
 
if [ "${SUPERUSER}" = "" ]; then
	echo "Please specify the username of mysql."
	echo "Usage: exportsqlusers root pass"
	exit 1
fi
if [ "${SUPERPASS}" = "" ]; then
	echo "Please specify the password of mysql."
	echo "Usage: exmportsqlusers root pass"
	exit 1
fi
#echo ${SUPERUSER}
#echo ${SUPERPASS}
 
USERS_HOSTS=`mysql -u ${SUPERUSER} -B -N -p"${SUPERPASS}" -e "SELECT user, host FROM user" mysql`
 
 
for USER_HOST in ${USERS_HOSTS}; do
	NULL_STRING=0	#индикатор пустой строки
	#echo ${USER_HOST}
	USER=`echo ${USER_HOST} | awk '{print $1}'`
	#echo user: ${USER}
	HOST=`echo ${USER_HOST} | awk '{print $2}'`
	#echo host: ${HOST}
	if [ "${USER}" = "" ]; then
		NULL_STRING=1
	fi
	if [ "${HOST}" = "" ]; then
		NULL_STRING=1
	fi
	if [ "${NULL_STRING}" = "0" ]; then
		SQL_QUERIES=`mysql -u "${SUPERUSER}" -p"${SUPERPASS}" -B -N -e"SHOW GRANTS FOR '${USER}'@'${HOST}'"`
		for SQL_QUERY in ${SQL_QUERIES}; do
			echo ${SQL_QUERY}\;
			#echo -----------------------------------------
		done
	fi
done
 
IFS=$SAVEIFS

Теперь импортируем то и то:

#!/bin/sh
#Импорт SQL запросов в базу (привилегии пользователей)
FILE="$1"
SUPERUSER="$2"
SUPERPASS="$3"
if [ "${SUPERUSER}" = "" ]; then
	echo "Please specify the username of mysql."
	echo "Usage: importsqlusers filename root pass"
	exit 1
fi
if [ "${SUPERPASS}" = "" ]; then
	echo "Please specify the password of mysql."
	echo "Usage: importsqlusers filename root pass"
	exit 1
fi
if [ "${FILE}" = "" ]; then
	echo "Please specify the file with sql queries."
	echo "Usage: importsqlusers filename root pass"
	exit 1
fi
#echo ${SUPERUSER}
#echo ${SUPERPASS}
 
DATA=`cat "${FILE}" | grep GRANT`
 
 
SAVEIFS=$IFS
IFS='
'
for QUERY in ${DATA}; do
	echo ${QUERY}
	mysql -u ${SUPERUSER} -B -p"${SUPERPASS}" -e "${QUERY}"
	echo --------------
done
mysql -u ${SUPERUSER} -B -p"${SUPERPASS}" -e "FLUSH PRIVILEGES;"
 
IFS=$SAVEIFS

 

#!/bin/sh
#Импорт архивированных баз данных.
#должны быть в формате sql.gz
SUPERUSER="$1"
SUPERPASS="$2"
if [ "${SUPERUSER}" = "" ]; then
	echo "Please specify the username of mysql."
	echo "Usage: importdumps root pass"
	exit 1
fi
if [ "${SUPERPASS}" = "" ]; then
	echo "Please specify the password of mysql."
	echo "Usage: importdumps root pass"
	exit 1
fi
 
#echo ${SUPERUSER}
#echo ${SUPERPASS}
 
DIR=`ls -l | grep sql\.gz | awk '{print $9}'`
 
SAVEIFS=$IFS
IFS='
'
for FILENAME in ${DIR}; do
	echo ${FILENAME}
	#A=`gzip -dkc ${FILENAME} `
	DB_NAME=`gzip -dkc ${FILENAME} | grep Host: | grep Database: | awk -FDatabase: '{print $2}' | sed -e 's/^ *//g' -e 's/ *$//g'`
	mysql -u ${SUPERUSER} -B -p"${SUPERPASS}" -e "CREATE DATABASE IF NOT EXISTS ${DB_NAME} CHARSET utf8;"
	gunzip < ${FILENAME} | mysql -u ${SUPERUSER} -p"${SUPERPASS}"  ${DB_NAME}
 
	#echo --------------
done
#mysql -u ${SUPERUSER} -B -p"${SUPERPASS}" -e "FLUSH PRIVILEGES;"
 
IFS=$SAVEIFS

 

 

 

Рубрика: 

Comments

Add new comment

CAPTCHA
Ответьте на простой вопрос, посмотрим, нужны ли нам ваши комментарии…
Image CAPTCHA
Enter the characters shown in the image.