目录
- #!/bin/bash
- # 定义数据库相关的变量
- MYSQL_USER=root
- MYSQL_PASS=mysql_P@s5 # 密码
- MYSQL_PORT=3306 # 端口
- MYSQL_HOST=localhost # 数据库ip
- MYSQL_ADMIN="mysqladmin -u$MYSQL_USER -p$MYSQL_PASS -P$MYSQL_PORT -h$MYSQL_HOST"
- MYSQL_COMM="mysql -u$MYSQL_USER -p$MYSQL_PASS -P$MYSQL_PORT -h$MYSQL_HOST -e"
-
- # 定义变量:显示颜色属性
- SUCCESS="echo -en \\033[1;32m" # 绿色
- FAILURE="echo -en \\033[1;31m" # 红色
- WARNING="echo -en \\033[1;33m" # 黄色
- NORMAL="echo -en \\033[0;39m" # 黑色
-
- # 检查数据库服务器的状态
- $MYSQL_ADMIN ping &> /dev/null
- if [ $? -ne 0 ];then
- $FAILURE
- echo "无法连接数据库服务器"
- $NORMAL
- exit
- else
- echo -n "数据库状态:"
- $SUCCESS
- echo "[OK]"
- $NORMAL
- fi
- mysql_test(){
- # 过滤数据库启动时间
- RUN_TIME=$($MYSQL_COMM "SHOW GLOBAL STATUS LIKE 'uptime'" | awk '/Uptime/{print $2}')
- echo -n "数据库已运行时间(秒):"
- $SUCCESS
- echo $RUN_TIME
- $NORMAL
-
- # 过滤数据库列表
- DB_LIST=$($MYSQL_COMM "SHOW DATABASES")
- DB_COUNT=$($MYSQL_COMM "SHOW DATABASES" | awk 'NR>=2&&/^[^+]/{db_count++} END{print db_count}')
- echo -n "数据库有$DB_COUNT个数据库,分别为:"
- $SUCCESS
- echo $DB_LIST
- $NORMAL
-
- # 查询MYSQL最大并发连接数
- MAX_CON=$($MYSQL_COMM "SHOW VARIABLES LIKE 'max_connections'" | awk '/max/{print $2}')
- echo -n "MYSQL最大并发连接数:"
- $SUCCESS
- echo $MAX_CON
- $NORMAL
-
- # 查看SELECT指令被执行数
- NUM_SELECT=$($MYSQL_COMM "SHOW GLOBAL STATUS LIKE 'com_select'" | awk '/Com_select/{print $2}')
- echo -n "SELECT指令被执行数:"
- $SUCCESS
- echo $NUM_SELECT
- $NORMAL
-
- # 查看UPDATE指令被执行次数
- NUM_UPDATE=$($MYSQL_COMM "SHOW GLOBAL STATUS LIKE 'com_update'" | awk '/Com_update/{print $2}')
- $SUCCESS
- echo -n "UPDATE指令被执行次数:"
- echo $NUM_UPDATE
- $NORMAL
-
- # 查看DELETE指令被查看的次数
- NUM_DELETE=$($MYSQL_COMM "SHOW GLOBAL STATUS LIKE 'com_delete'" | awk '/Com_delete/{print $2}')
- $SUCCESS
- echo -n "DELETE指令被查看的次数:"
- echo $NUM_DELETE
- $NORMAL
-
- # 查看INSERT指令被查看的次数
- NUM_INSERT=$($MYSQL_COMM "SHOW GLOBAL STATUS LIKE 'com_insert'" | awk '/Com_insert/{print $2}')
- $SUCCESS
- echo -n "INSERT指令被查看的次数:"
- echo $NUM_INSERT
- $NORMAL
-
- # 查看COMMIT指令被查看的次数
- NUM_COMMIT=$($MYSQL_COMM "SHOW GLOBAL STATUS LIKE 'com_commit'" | awk '/Com_commit/{print $2}')
- $SUCCESS
- echo -n "COMMIT指令被查看的次数:"
- echo $NUM_COMMIT
- $NORMAL
-
- # 查看ROLLBACK指令被查看的次数
- NUM_ROLLBACK=$($MYSQL_COMM "SHOW GLOBAL STATUS LIKE 'com_rollback'" | awk '/Com_rollback/{print $2}')
- $SUCCESS
- echo -n "ROLLBACK指令被查看的次数:"
- echo $NUM_ROLLBACK
- $NORMAL
-
- # 查看服务器总指令数
- NUM_QUESTION=$($MYSQL_COMM "SHOW GLOBAL STATUS LIKE 'Questions'" | awk '/Questions/{print $2}')
- $SUCCESS
- echo -n "QUESTION服务器总指令次数:"
- echo $NUM_QUESTION
- $NORMAL
-
- # 查看慢查询数
- NUM_SLOW_QUERY=$($MYSQL_COMM "SHOW GLOBAL STATUS LIKE 'slow_queries'" | awk '/Slow_queries/{print $2}')
- $SUCCESS
- echo -n "SLOW_QUERY慢查询数:"
- echo $NUM_SLOW_QUERY
- $NORMAL
-
- # 数据库QPS
- echo -n "数据库QPS:"
- $SUCCESS
- awk 'BEGIN{print '"$NUM_QUESTION/$RUN_TIME"'}'
- $NORMAL
-
- # 数据库TPS
- echo -n "数据库TPS:"
- $SUCCESS
- awk 'BEGIN{print '"($NUM_COMMIT+$NUM_ROLLBACK)/$RUN_TIME"'}'
- $NORMAL
- }
- mysql_test 2>/dev/null
- #!/bin/bash
- ## 基本配置变量
- USER="root" # 输入用户
- PORT=3306 # 端口
- PASSWORD="xxx" # 密码
- HOST="xxx.xxx.xxx.xxx" # 数据库ip
- DB_md=`mysql -u${USER} -p"${PASSWORD}" -h${HOST} -P${PORT} --default-character-set=utf8mb4 -e "show databases"|grep -Ev "^(Database|mysql|performance_schema|information_schema|sys)$"|xargs` # 所有库名
- TB="show tables" # 查看表名
-
- back (){
- ## 准备数据备份目录
- if [ -d /data/sql-back ];then
- echo ""
- else
- mkdir -p /data/sql-back
- ALL_LOG=/data/sql-back # 备份目录
- fi
- if [ -d /data/sql-back/data ];then
- echo ""
- else
- mkdir -p /data/sql-back/data
- DATA_LOG=/data/sql-back/data # 备份数据sql目录
- fi
- if [ -d /data/sql-back/structure ];then
- echo ""
- else
- mkdir -p /data/sql-back/structure
- ST_LOG=/data/sql-back/structure # 备份数据sql表结构目录
- fi
-
-
-
- ## 准备哈希值
- if [ -e ${ALL_LOG}/count_sum.txt ];then
- touch count_sum.txt
- else
- rm -rf ${ALL_LOG}/count_sum.txt && touch ${ALL_LOG}/count_sum.txt
- fi
- # 所有库名
- for i in ${DB_md}
- do
- # 所有表名
- for j in `mysql -u$USER -p$PASSWORD -P$PORT -h$HOST -D $i --skip-column-names -e "$TB" `
- do
- # 统计表中的数据单元格数目
- su=`mysql -u$USER -p$PASSWORD -P$PORT -h$HOST -D $i --skip-column-names -e "select count(*) from $j"`
- echo -e ${i}:${j}:${su} >> ${ALL_LOG}/count_sum.txt
- done
- echo -e "\n++++++++++++++++++++++++++++++++" >> ${ALL_LOG}/count_sum.txt
- done
-
- # 备份全部数据库数据
- echo "备份全部数据库数据"
- /usr/local/mysql/bin/mysqldump -u${USER} -p${PASSWORD} --default-character-set=utf8 --single-transaction --master-data=2 --all-databases > /data/sql-back/all.sql
- ## 只备份数据结构
- echo "只备份数据结构"
- for s in ${DB_md}
- do
- /usr/local/mysql/bin/mysqldump -u${USER} -p${PASSWORD} --default-character-set=utf8 --set-gtid-purged=OFF --hex-blob --no-data --skip-lock-tables --complete-insert --skip-tz-utc --compact --databases ${s} > $ST_LOG/$s.sql
- done
-
- ## 只备份数据
- echo "只备份数据"
- for d in ${DB_md}
- do
- /usr/local/mysql/bin/mysqldump -u${USER} -p${PASSWORD} --default-character-set=utf8 --set-gtid-purged=OFF --hex-blob --no-create-info --skip-lock-tables --complete-insert --skip-tz-utc --compact --databases ${d} > $DATA_LOG/$d.sql
- done
- }
- back 2> /dev/null
如果不指定,mysqldump默认使用UTF8字符集进行导出。
选项名称 | 默认值 | 可选值 | 作用 |
---|---|---|---|
-- default-character-set | UTF8 | 实例支持的字符集 | 设置导出的字符集 |
MySQL 5.6引入了GTID特性,因此5.6版本的mysqldump工具增加了set-gtid-purged选项。
说明
ON:在mysqldump输出中包含SET @@GLOBAL.GTID_PURGED语句。
OFF:在mysqldump输出中不包含 SET @@GLOBAL.GTID_PURGED 语句。
AUTO:默认值。对于启用了GTID的实例,会输出 SET @@GLOBAL.GTID_PURGED语句;对于没有启动或者不支持GTID的实例,不输出任何GTID相关信息。
因此对于使用MySQL 5.6及以上版本自带的mysqldump工具导出RDS MySQL 5.5版本实例数据时,需要设置set-gtid-purged为OFF,否则会报以下错误:
Error: Server has GTIDs disabled. 或者 mysqldump: Couldn’t execute ‘SELECT @@GTID_MODE’: Unknown system variable ‘GTID_MODE’ <1193>
选项名称 | 默认值 | 可选值 | 作用 |
---|---|---|---|
no-data | FALSE | TRUE|FALSE | 不导出数据。 |
hex-blob | FALSE | TRUE|FALSE | 以16进制导出Binary、VarBinary、BLOB类型数据。如果跨版本迁移数据,建议增加该选项。 |
complete-insert | FALSE | TRUE|FALSE | 生成一个完整的列值映射关系 |
compact | FALSE | TRUE|FALSE | 启用skip-add-drop-table、skip-add-locks、skip-comments、skip-disable-keys、skip-set-charset 选项。 |
skip-tz-utc | FALSE | TRUE|FALSE | 导出数据时,不使用格林威治时间,而使用当前 mysql 服务器的时区进行导出 |
no-create-info | FALSE | TRUE|FALSE | 含义是只导出数据,而不添加CREATE TABLE语句 |
force | FALSE | TRUE|FALSE | 当出现错误时仍然继续备份操作 |
databases | FALSE | TRUE|FALSE | 完整导出指定的数据库 ; 包括建库语句、表结构、数据 |
quick, -q | True | TRUE|FALSE | 不缓冲查询,直接导出到标准输出。默认为打开状态,使用--skip-quick取消该选项 |
master-data=2 | FALSE | TRUE|FALSE | 会将change master 语句写入dump文件中,只不过会被注释掉 |
insert-ignore | FALSE | TRUE|FALSE | 在插入行时使用INSERT IGNORE语句 |
skip-column-name | FALSE | TRUE|FALSE | 输出结果无列名 |
-D | True | TRUE|FALSE | 指定库名 |
选项名称 | 默认值 | 可选值 | 作用 |
---|---|---|---|
lock-tables | TRUE | TRUE|FALSE | 导出期间在导出表上设置表级锁。默认开启。可以通过指定 skip-lock-tables选项来关闭。 |