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