Clone user / Dump views in MySQL

 
   Clone user / Dump views in MySQL

 

 

1. 数据库搬迁或复制的时候,需要同步MySQL user 及其权限,创建了脚本操作,如下:

 

 

#!/bin/bash -l
if [ $# -lt 1 ]; then
    echo "usage: $0 [MySQLHost]"                                                                      
    exit 1
fi
MySQLHost=${1}
MySQLbin="`which mysql`"
if [ ! -f "${MySQLbin}" ]; then
        MySQLbin="/usr/local/mysql/bin/mysql"
fi

if [ ! -f "${MySQLbin}" ]; then
  echo "can't find the mysql command,please check"                                                                      
  exit 1
fi
echo "SELECT DISTINCT CONCAT (\"show grants for '\", user, \"'@'\", host, \"';\") AS query FROM mysql.user where user not in ('root','mysql') and trim(ifnull(user,''))!=''; " >   script.sql
read -s -p "Enter the mysql password: "

if [ "$REPLY" == "" ]; then
  echo "no password typed, the program will exit"
  exit 1
fi

"${MySQLbin}" -h"${MySQLHost}" -umysql -p"${REPLY}"  < script.sql > output.sql ;
cat output.sql | grep show > output1.sql  ; rm output.sql -f ;
output_file="grants_for_mysql_account_on_${1}.sql"
"${MySQLbin}"  -h"${MySQLHost}"  -umysql -p"${REPLY}"  < output1.sql > ${output_file} ;
clear
echo "-----Exported Grants-----"
sed -i 's/\(GRANT .*\)/\1;/;s/^\(Grants for .*\)/## \1 ##/;/##/{x;p;x;}' "${output_file}"
cat  "${output_file}"  ; rm  output1.sql -f
echo "-------------------------"
echo "generated ${output_file}"
rm  script.sql -f

 

 

 2. 有时候,只需要备份或导出并搬迁一个数据库的所有 View,

可用命令如下:

mysql INFORMATION_SCHEMA --skip-column-names --batch -e "select table_name from tables where table_type = 'VIEW' and table_schema = 'db'" | xargs mysqldump db > /tmp/views_db.sql

 

猜你喜欢

转载自ucstudio.iteye.com/blog/2261114