MySQL--使用mysqldump进行数据库版本升级
在MySQL跨版本升级时,建议使用mysqldump方式导出用户权限和用户数据,即使是小版本升级,导出过程中也应忽略系统数据库,避免系统表不兼容。
导出用户数据库脚本和用户创建脚本
##====================================================================##
# MySQL Dump导出数据和权限脚本
# 如果在主库上备份使用--master-data=2参数
# 如果在从库上备份使用--dump-slave=2参数
##====================================================================##
mysql_exe="/export/servers/mysql/bin/mysql"
mysqldump_exe="/export/servers/mysql/bin/mysqldump"
mysql_host="127.0.0.1"
mysql_port=3306
mysql_user="root"
mysql_password="root_psw"
working_dir="/export/mysql_update/"
data_file="${working_dir}/data_script.sql"
user_file="${working_dir}/user_script.sql"
log_file="${working_dir}/mysql_dump_log.txt"
err_file="${working_dir}/mysql_dump_err.txt"
master_slave_data="--master-data=2"
mysql_version="mysql57" ##====================================================##
## 1. create folder and file for mysql dump
##====================================================##
function crete_dump_file()
{
if [ -d ${data_file} ]
then
echo 'data file is exists, please check and remove it'.
exit 1
fi /bin/mkdir -p ${working_dir}
> ${data_file}
> ${user_file}
> ${log_file}
> ${err_file}
} ##====================================================##
## 1. get mysql version
##====================================================##
function get_mysql_version()
{
master_version_tmp=`${mysql_exe} \
--host="${mysql_host}" --port=${mysql_port} \
--user="${mysql_user}" --password="${mysql_password}" \
-e "select @@version;"`
if [[ master_version_tmp == 5.5.* ]]
then
mysql_version="mysql55"
elif [[ master_version_tmp == 5.6.* ]]
then
mysql_version="mysql56"
else
mysql_version="mysql57"
fi
} ##====================================================##
## 1. change global long_query_time=100
## 2、change session sql_log_bin=0
## 3. change global sync_binlog=0
## 4. change global innodb_flush_log_at_trx_commit=0
##====================================================##
function write_load_option()
{
echo "SET SESSION long_query_time=100;" >> ${data_file}
echo "SET GLOBAL sync_binlog=2;" >> ${data_file}
echo "SET GLOBAL innodb_flush_log_at_trx_commit=0;" >> ${data_file}
} ##====================================================##
## 1. if this is master server, user option master-data=2
## 2. if this is slave server, use option dump-slave=2
## 3. if this is slave server, get slave status and change master_host
##====================================================##
function create_master_slave_option()
{
master_host_ip=`${mysql_exe} \
--host="${mysql_host}" --port=${mysql_port} \
--user="${mysql_user}" --password="${mysql_password}" \
-e "show slave status \G" |grep "Master_Host"|head -n 1|awk -F":" '{gsub(" ","",$2);print $2}'` if [[ "$master_host_ip" == "1.1.1.1" ]]
then
echo "This is master server,use --master-data=2" >> ${log_file}
master_slave_data="--master-data=2"
elif [[ "$master_host_ip" == "" ]]
then
echo "This is master server,use --master-data=2" >> ${log_file}
master_slave_data="--master-data=2"
else
echo "This is slave server,use --dump-slave=2" >> ${log_file}
master_slave_data="--dump-slave=2"
get_slave_status
fi
} ##====================================================##
## 1. dump data from user databases.
##====================================================##
function dump_user_data(){
databases=`${mysql_exe} \
--host="${mysql_host}" --port=${mysql_port} \
--user="${mysql_user}" --password="${mysql_password}" \
-Ne "SELECT SCHEMA_NAME
FROM information_schema.SCHEMATA
WHERE SCHEMA_NAME NOT IN ('information_schema','performance_schema','sys','mysql');"` echo "databases:${databases}" >> ${log_file} if [[ mysql_version == "mysql55" ]]
then
gtid_purged_option=""
else
gtid_purged_option="--set-gtid-purged=OFF"
fi ## 导出建表语句和数据
((echo "Start mysqldump data at "`date "+%y-%m-%d %H:%M:%S"`) \
&& ( ${mysqldump_exe} \
--host="${mysql_host}" \
--port=${mysql_port} \
--user="${mysql_user}" \
--password="${mysql_password}" \
--default-character-set=utf8 \
--hex-blob --opt --quick \
--events --routines --triggers \
--single_transaction \
${gtid_purged_option} \
${master_slave_data} \
--databases $databases \
>> ${data_file} ) \
&& (echo "MySQLdump data success at "`date "+%y-%m-%d %H:%M:%S"`)) \
1>>${log_file} \
2>>${err_file}
} ##====================================================##
## 1. dump user script on mysql
## 2. this script only can be used on mysql 5.7
##====================================================##
function dump_user_script_5_7()
{
((echo "start mysqldump user at "`date "+%y-%m-%d %H:%M:%S"`) \
&& (echo "select concat('show create user ''',user,'''@''',host, ''';','show grants for ''',user,'''@''',host, ''';') from mysql.user where user <>'root' and user<>'' and host <> '' " | \
${mysql_exe} --host="${mysql_host}" --port=${mysql_port} \
--user="${mysql_user}" --password="${mysql_password}" -N | \
${mysql_exe} --host="${mysql_host}" --port=${mysql_port} \
--user="${mysql_user}" --password="${mysql_password}" -N | \
sed "s/$/;/" >> ${user_file}) \
&& (echo "MySQLdump user success at "`date "+%y-%m-%d %H:%M:%S"`)) \
1>>${log_file} \
2>>${err_file}
} ##====================================================##
## 1. dump user script on mysql
## 2. this script only can be used on mysql 5.5
##====================================================##
function dump_user_script_5_5()
{
((echo "start mysqldump user at "`date "+%y-%m-%d %H:%M:%S"`) \
&& (echo "select concat('show grants for ''',user,'''@''',host, ''';') from mysql.user where user <>'root' and user<>'' and host <> '' " | \
${mysql_exe} --host="${mysql_host}" --port=${mysql_port} --user="${mysql_user}" --password="${mysql_password}" -N | \
${mysql_exe} --host="${mysql_host}" --port=${mysql_port} --user="${mysql_user}" --password="${mysql_password}" -N | \
sed "s/$/;/" >> ${user_file}) \
&& (echo "MySQLdump user success at "`date "+%y-%m-%d %H:%M:%S"`)) \
1>>${log_file} \
2>>${err_file}
} function dump_user_script()
{
if [[ mysql_version == "mysql55" ]]
then
dump_user_script_5_5
else
dump_user_script_5_7
fi
} echo "check and create folder and file"
crete_dump_file echo "write load option"
write_load_option echo "check mysql version"
get_mysql_version echo "dump user data"
dump_user_data echo "dump user right"
dump_user_script echo "MySQL dump finished"
导入用户数据库和用户脚本
##====================================================================##
mysql_exe="/export/servers/mysql/bin/mysql"
mysqldump_exe="/export/servers/mysql/bin/mysqldump"
mysql_host="127.0.0.1"
mysql_port=
mysql_user="root"
mysql_password="root_psw"
working_dir="/export/mysql_update/"
data_file="${working_dir}/data_script.sql"
user_file="${working_dir}/user_script.sql"
log_file="${working_dir}/mysql_load_log.txt"
err_file="${working_dir}/mysql_load_err.txt" ##====================================================##
## . init_env
##====================================================##
function init_env()
{
echo "init env"
echo > ${log_file}
echo > ${err_file}
} ##====================================================##
## . load user data
##====================================================##
function load_user_data()
{
echo "start to load user data" ((echo "Start load data at "`date "+%y-%m-%d %H:%M:%S"`) \
&& ( ${mysql_exe} \
--host="${mysql_host}" --port=${mysql_port} \
--user="${mysql_user}" --password="${mysql_password}" \
--batch < ${data_file} ) \
&& (echo "load data success at "`date "+%y-%m-%d %H:%M:%S"`)) \
>>${log_file} \
>>${err_file} echo "end to load user data" } ##====================================================##
## . load user right
##====================================================##
function load_user_right()
{
echo "start to load user right" ((echo "Start load use right at "`date "+%y-%m-%d %H:%M:%S"`) \
&& ( ${mysql_exe} \
--host="${mysql_host}" --port=${mysql_port} \
--user="${mysql_user}" --password="${mysql_password}" \
--batch < ${user_file} ) \
&& (echo "load user right at "`date "+%y-%m-%d %H:%M:%S"`)) \
>>${log_file} \
>>${err_file} echo "end to load user right" } init_env
load_user_data
load_user_right
MySQL--使用mysqldump进行数据库版本升级的更多相关文章
- MySQL之 Mysqldump导出数据库
参数大全 参数说明 --all-databases , -A 导出全部数据库. mysqldump -uroot -p --all-databases --all-tablespaces , -Y 导 ...
- MySQL 使用 MySQLDump 复制数据库
1.导出整个数据库 mysqldump -u 用户名 -p 数据库名 > 导出的文件名 mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.s ...
- MySQL使用mysqldump+binlog完整恢复被删除的数据库
(一)概述 在日常的MySQL数据库运维过程中,可能会遇到用户误删除数据,常见的误删除数据操作有: 用户执行delete,因为条件不对,删除了不应该删除的数据(DML操作): 用户执行update,因 ...
- PHP定时备份MySQL,mysqldump语法大全
几个常用操作: 1.备份 # 只导出表结构 d:/PHP/xampp/mysql/bin/mysqldump -h127.0.0.1 -P3306 -uroot -p123456 snsgou_sns ...
- MySQL命令行导出数据库
MySQL命令行导出数据库:1,进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录如我输入的命令行:cd C:\Program Files\MySQL\MySQL Server ...
- Mysql使用mysqldump按时间导出时的一个注意事项
在使用Mysql的mysqldump命令按时间进行数据导出时,我们可能会遇到导出数据与原库中不符或者导出数据和我们期望的数据不同的情况. 我们知道Mysql数据库导出可以使用命令mysqldump,使 ...
- MYSQL使用mysqldump导出某个表的部分数据
命令格式如下: mysqldump -u用户名 -p密码 数据库名 表名 --where="筛选条件" > 导出文件路径 例子: 从meteo数据库的sdata表中导出sen ...
- MySQL的mysqldump工具的基本用法
导出要用到MySQL的mysqldump工具,基本用法是: shell> mysqldump [OPTIONS] database [tables] 如果你不给定任何表,整个数据库将 ...
- MySQL 同主机不同数据库之间的复制
MySQL同主机不同数据库的复制命令:注意运行在Terminal中,不运行在MySQL命令行中. mysqldump Portal_DEV -u root -ppassword1 --add-drop ...
随机推荐
- flutter 高德地图选择位置信息返回
添加依赖:(注意,作者一直更新维护,请以最新的版本添加) amap_map_fluttify: ^ amap_search_fluttify: ^ 代码实现: import 'package:amap ...
- 利用c# 多屏显示
公司搞了一个电视墙,要显示不同内容,于是买了一个多接口显卡(现在看来这个方案不是太好,但非常省钱) 要打开的就是几个网页,但要自己手工拖到不同电视上,非常麻烦 于是查了一下资料,发现可以用代码实现,说 ...
- LeetCode 112. Path Sum(路径和是否可为sum)
Given a binary tree and a sum, determine if the tree has a root-to-leaf path such that adding up all ...
- SDN实验---Ryu的应用开发(二)Learning Switch
一:自学习交换机(二层MAC交换机)的编程思路 (一)明确问题 如何实现软件定义的自学习交换机? (二)设计解决方案 通过控制器来实现自学习交换算法,然后指导数据平面实现交换机操作 (三)确定具体的技 ...
- PMP 第7章错题总结
这一章全是公式,是计算量最大的一章 1.进度安排的灵活性是由总时差决定的2.三点估算通过考虑估算中的不确定性和风险,可以提高活动持续时间估算的准确性3.快速跟进是一种进度压缩技术,将正常情况下按顺序进 ...
- xpath库学习
xpath解析是我们在爬虫中最常用也是最通用的一种数据解析方式. 环境安装 pip install lxml 解析原理 使用通用爬虫爬取网页数据 实例化etree对象,且将页面数据加载到该对象中 使用 ...
- spring boot使用WebClient调用其他系统提供的HTTP服务
WebClient的请求模式属于异步非阻塞,能够以少量固定的线程处理高并发的HTTP请求 WebClient是Spring WebFlux模块提供的一个非阻塞的基于响应式编程的进行Http请求的客户端 ...
- C#反射机制(转自Binfire博客)
一:反射的定义 审查元数据并收集关于它的类型信息的能力.元数据(编译以后的最基本数据单元)就是一大堆的表,当编译程序集或者模块时,编译器会创建一个类定义表,一个字段定义表,和一个方法定义表等. Sys ...
- 2019最新版Java程序员零基础入门视频教程资料(全套)
为了解决Java学习初学者在网上找视频难的事情,本人整理了一份2019年度最新版的Java学习视频教程.希望看到这份视频的你们都能找到一份称心的工作,技术上都能得到进一步的提升,好东西就要分享给你们, ...
- [转帖]Java中重写和重载与多态的关系
Java中重写和重载与多态的关系 2019-09-05 00:57:41 留下一天今天 阅读数 67 收藏 更多 分类专栏: java进阶之路 版权声明:本文为博主原创文章,遵循CC 4.0 B ...