在MySQL跨版本升级时,建议使用mysqldump方式导出用户权限和用户数据,即使是小版本升级,导出过程中也应忽略系统数据库,避免系统表不兼容。

导出用户数据库脚本和用户创建脚本

  1. ##====================================================================##
  2. # MySQL Dump导出数据和权限脚本
  3. # 如果在主库上备份使用--master-data=2参数
  4. # 如果在从库上备份使用--dump-slave=2参数
  5. ##====================================================================##
  6. mysql_exe="/export/servers/mysql/bin/mysql"
  7. mysqldump_exe="/export/servers/mysql/bin/mysqldump"
  8. mysql_host="127.0.0.1"
  9. mysql_port=3306
  10. mysql_user="root"
  11. mysql_password="root_psw"
  12. working_dir="/export/mysql_update/"
  13. data_file="${working_dir}/data_script.sql"
  14. user_file="${working_dir}/user_script.sql"
  15. log_file="${working_dir}/mysql_dump_log.txt"
  16. err_file="${working_dir}/mysql_dump_err.txt"
  17. master_slave_data="--master-data=2"
  18. mysql_version="mysql57"
  19.  
  20. ##====================================================##
  21. ## 1. create folder and file for mysql dump
  22. ##====================================================##
  23. function crete_dump_file()
  24. {
  25. if [ -d ${data_file} ]
  26. then
  27. echo 'data file is exists, please check and remove it'.
  28. exit 1
  29. fi
  30.  
  31. /bin/mkdir -p ${working_dir}
  32. > ${data_file}
  33. > ${user_file}
  34. > ${log_file}
  35. > ${err_file}
  36. }
  37.  
  38. ##====================================================##
  39. ## 1. get mysql version
  40. ##====================================================##
  41. function get_mysql_version()
  42. {
  43. master_version_tmp=`${mysql_exe} \
  44. --host="${mysql_host}" --port=${mysql_port} \
  45. --user="${mysql_user}" --password="${mysql_password}" \
  46. -e "select @@version;"`
  47. if [[ master_version_tmp == 5.5.* ]]
  48. then
  49. mysql_version="mysql55"
  50. elif [[ master_version_tmp == 5.6.* ]]
  51. then
  52. mysql_version="mysql56"
  53. else
  54. mysql_version="mysql57"
  55. fi
  56. }
  57.  
  58. ##====================================================##
  59. ## 1. change global long_query_time=100
  60. ## 2、change session sql_log_bin=0
  61. ## 3. change global sync_binlog=0
  62. ## 4. change global innodb_flush_log_at_trx_commit=0
  63. ##====================================================##
  64. function write_load_option()
  65. {
  66. echo "SET SESSION long_query_time=100;" >> ${data_file}
  67. echo "SET GLOBAL sync_binlog=2;" >> ${data_file}
  68. echo "SET GLOBAL innodb_flush_log_at_trx_commit=0;" >> ${data_file}
  69. }
  70.  
  71. ##====================================================##
  72. ## 1. if this is master server, user option master-data=2
  73. ## 2. if this is slave server, use option dump-slave=2
  74. ## 3. if this is slave server, get slave status and change master_host
  75. ##====================================================##
  76. function create_master_slave_option()
  77. {
  78. master_host_ip=`${mysql_exe} \
  79. --host="${mysql_host}" --port=${mysql_port} \
  80. --user="${mysql_user}" --password="${mysql_password}" \
  81. -e "show slave status \G" |grep "Master_Host"|head -n 1|awk -F":" '{gsub(" ","",$2);print $2}'`
  82.  
  83. if [[ "$master_host_ip" == "1.1.1.1" ]]
  84. then
  85. echo "This is master server,use --master-data=2" >> ${log_file}
  86. master_slave_data="--master-data=2"
  87. elif [[ "$master_host_ip" == "" ]]
  88. then
  89. echo "This is master server,use --master-data=2" >> ${log_file}
  90. master_slave_data="--master-data=2"
  91. else
  92. echo "This is slave server,use --dump-slave=2" >> ${log_file}
  93. master_slave_data="--dump-slave=2"
  94. get_slave_status
  95. fi
  96. }
  97.  
  98. ##====================================================##
  99. ## 1. dump data from user databases.
  100. ##====================================================##
  101. function dump_user_data(){
  102. databases=`${mysql_exe} \
  103. --host="${mysql_host}" --port=${mysql_port} \
  104. --user="${mysql_user}" --password="${mysql_password}" \
  105. -Ne "SELECT SCHEMA_NAME
  106. FROM information_schema.SCHEMATA
  107. WHERE SCHEMA_NAME NOT IN ('information_schema','performance_schema','sys','mysql');"`
  108.  
  109. echo "databases:${databases}" >> ${log_file}
  110.  
  111. if [[ mysql_version == "mysql55" ]]
  112. then
  113. gtid_purged_option=""
  114. else
  115. gtid_purged_option="--set-gtid-purged=OFF"
  116. fi
  117.  
  118. ## 导出建表语句和数据
  119. ((echo "Start mysqldump data at "`date "+%y-%m-%d %H:%M:%S"`) \
  120. && ( ${mysqldump_exe} \
  121. --host="${mysql_host}" \
  122. --port=${mysql_port} \
  123. --user="${mysql_user}" \
  124. --password="${mysql_password}" \
  125. --default-character-set=utf8 \
  126. --hex-blob --opt --quick \
  127. --events --routines --triggers \
  128. --single_transaction \
  129. ${gtid_purged_option} \
  130. ${master_slave_data} \
  131. --databases $databases \
  132. >> ${data_file} ) \
  133. && (echo "MySQLdump data success at "`date "+%y-%m-%d %H:%M:%S"`)) \
  134. 1>>${log_file} \
  135. 2>>${err_file}
  136. }
  137.  
  138. ##====================================================##
  139. ## 1. dump user script on mysql
  140. ## 2. this script only can be used on mysql 5.7
  141. ##====================================================##
  142. function dump_user_script_5_7()
  143. {
  144. ((echo "start mysqldump user at "`date "+%y-%m-%d %H:%M:%S"`) \
  145. && (echo "select concat('show create user ''',user,'''@''',host, ''';','show grants for ''',user,'''@''',host, ''';') from mysql.user where user <>'root' and user<>'' and host <> '' " | \
  146. ${mysql_exe} --host="${mysql_host}" --port=${mysql_port} \
  147. --user="${mysql_user}" --password="${mysql_password}" -N | \
  148. ${mysql_exe} --host="${mysql_host}" --port=${mysql_port} \
  149. --user="${mysql_user}" --password="${mysql_password}" -N | \
  150. sed "s/$/;/" >> ${user_file}) \
  151. && (echo "MySQLdump user success at "`date "+%y-%m-%d %H:%M:%S"`)) \
  152. 1>>${log_file} \
  153. 2>>${err_file}
  154. }
  155.  
  156. ##====================================================##
  157. ## 1. dump user script on mysql
  158. ## 2. this script only can be used on mysql 5.5
  159. ##====================================================##
  160. function dump_user_script_5_5()
  161. {
  162. ((echo "start mysqldump user at "`date "+%y-%m-%d %H:%M:%S"`) \
  163. && (echo "select concat('show grants for ''',user,'''@''',host, ''';') from mysql.user where user <>'root' and user<>'' and host <> '' " | \
  164. ${mysql_exe} --host="${mysql_host}" --port=${mysql_port} --user="${mysql_user}" --password="${mysql_password}" -N | \
  165. ${mysql_exe} --host="${mysql_host}" --port=${mysql_port} --user="${mysql_user}" --password="${mysql_password}" -N | \
  166. sed "s/$/;/" >> ${user_file}) \
  167. && (echo "MySQLdump user success at "`date "+%y-%m-%d %H:%M:%S"`)) \
  168. 1>>${log_file} \
  169. 2>>${err_file}
  170. }
  171.  
  172. function dump_user_script()
  173. {
  174. if [[ mysql_version == "mysql55" ]]
  175. then
  176. dump_user_script_5_5
  177. else
  178. dump_user_script_5_7
  179. fi
  180. }
  181.  
  182. echo "check and create folder and file"
  183. crete_dump_file
  184.  
  185. echo "write load option"
  186. write_load_option
  187.  
  188. echo "check mysql version"
  189. get_mysql_version
  190.  
  191. echo "dump user data"
  192. dump_user_data
  193.  
  194. echo "dump user right"
  195. dump_user_script
  196.  
  197. echo "MySQL dump finished"

导入用户数据库和用户脚本

  1. ##====================================================================##
  2. mysql_exe="/export/servers/mysql/bin/mysql"
  3. mysqldump_exe="/export/servers/mysql/bin/mysqldump"
  4. mysql_host="127.0.0.1"
  5. mysql_port=
  6. mysql_user="root"
  7. mysql_password="root_psw"
  8. working_dir="/export/mysql_update/"
  9. data_file="${working_dir}/data_script.sql"
  10. user_file="${working_dir}/user_script.sql"
  11. log_file="${working_dir}/mysql_load_log.txt"
  12. err_file="${working_dir}/mysql_load_err.txt"
  13.  
  14. ##====================================================##
  15. ## . init_env
  16. ##====================================================##
  17. function init_env()
  18. {
  19. echo "init env"
  20. echo > ${log_file}
  21. echo > ${err_file}
  22. }
  23.  
  24. ##====================================================##
  25. ## . load user data
  26. ##====================================================##
  27. function load_user_data()
  28. {
  29. echo "start to load user data"
  30.  
  31. ((echo "Start load data at "`date "+%y-%m-%d %H:%M:%S"`) \
  32. && ( ${mysql_exe} \
  33. --host="${mysql_host}" --port=${mysql_port} \
  34. --user="${mysql_user}" --password="${mysql_password}" \
  35. --batch < ${data_file} ) \
  36. && (echo "load data success at "`date "+%y-%m-%d %H:%M:%S"`)) \
  37. >>${log_file} \
  38. >>${err_file}
  39.  
  40. echo "end to load user data"
  41.  
  42. }
  43.  
  44. ##====================================================##
  45. ## . load user right
  46. ##====================================================##
  47. function load_user_right()
  48. {
  49. echo "start to load user right"
  50.  
  51. ((echo "Start load use right at "`date "+%y-%m-%d %H:%M:%S"`) \
  52. && ( ${mysql_exe} \
  53. --host="${mysql_host}" --port=${mysql_port} \
  54. --user="${mysql_user}" --password="${mysql_password}" \
  55. --batch < ${user_file} ) \
  56. && (echo "load user right at "`date "+%y-%m-%d %H:%M:%S"`)) \
  57. >>${log_file} \
  58. >>${err_file}
  59.  
  60. echo "end to load user right"
  61.  
  62. }
  63.  
  64. init_env
  65. load_user_data
  66. load_user_right

MySQL--使用mysqldump进行数据库版本升级的更多相关文章

  1. MySQL之 Mysqldump导出数据库

    参数大全 参数说明 --all-databases , -A 导出全部数据库. mysqldump -uroot -p --all-databases --all-tablespaces , -Y 导 ...

  2. MySQL 使用 MySQLDump 复制数据库

    1.导出整个数据库  mysqldump -u 用户名 -p 数据库名 > 导出的文件名      mysqldump -u wcnc -p smgp_apps_wcnc > wcnc.s ...

  3. MySQL使用mysqldump+binlog完整恢复被删除的数据库

    (一)概述 在日常的MySQL数据库运维过程中,可能会遇到用户误删除数据,常见的误删除数据操作有: 用户执行delete,因为条件不对,删除了不应该删除的数据(DML操作): 用户执行update,因 ...

  4. PHP定时备份MySQL,mysqldump语法大全

    几个常用操作: 1.备份 # 只导出表结构 d:/PHP/xampp/mysql/bin/mysqldump -h127.0.0.1 -P3306 -uroot -p123456 snsgou_sns ...

  5. MySQL命令行导出数据库

    MySQL命令行导出数据库:1,进入MySQL目录下的bin文件夹:cd MySQL中到bin文件夹的目录如我输入的命令行:cd C:\Program Files\MySQL\MySQL Server ...

  6. Mysql使用mysqldump按时间导出时的一个注意事项

    在使用Mysql的mysqldump命令按时间进行数据导出时,我们可能会遇到导出数据与原库中不符或者导出数据和我们期望的数据不同的情况. 我们知道Mysql数据库导出可以使用命令mysqldump,使 ...

  7. MYSQL使用mysqldump导出某个表的部分数据

    命令格式如下: mysqldump -u用户名 -p密码 数据库名 表名 --where="筛选条件" > 导出文件路径 例子: 从meteo数据库的sdata表中导出sen ...

  8. MySQL的mysqldump工具的基本用法

    导出要用到MySQL的mysqldump工具,基本用法是:    shell> mysqldump [OPTIONS] database [tables]    如果你不给定任何表,整个数据库将 ...

  9. MySQL 同主机不同数据库之间的复制

    MySQL同主机不同数据库的复制命令:注意运行在Terminal中,不运行在MySQL命令行中. mysqldump Portal_DEV -u root -ppassword1 --add-drop ...

随机推荐

  1. UUIDGenerator

    import java.util.UUID; //下面就是实现为数据库获取一个唯一的主键id的代码 public class UUIDGenerator { public UUIDGenerator( ...

  2. MongoDB开发深入之一:文档数据关系模型详解(一对多,多对多)

    文档关联模型通常有3种方式: 嵌入式(一对一.一对多) 后期手动统一ID处理(一对多.多对多) References引用(一对一.一对多) 文档树模型通常有3种方式: 父引用(Parent Refer ...

  3. CVI中调用VC动态库

    1.在VC环境中建立新工程,创建32位动态库(Win32 Dynamic-Link Library)  -> A simple DLL project 2.在工程中可加入别的动态库,在工程菜单中 ...

  4. 使用抓包工具将抓到的接口存放Jmeter中

    1. jmeter工作台新增 HTTP代理服务器.端口设置为:8888 2. 抓包工具上面设置代理服务器地址 3.代理服务器未启动时,抓包工具界面显示无法联网. 4.在Jmeter中点击[启动]HTT ...

  5. 静默安装weblogic12c提示INST-07319: Oracle 主目录(O) 位置的验证失败。指定的位置已存在, 是非空目录并且不是有效的 Oracle 主目录

    [xxx@localhost bea12c3]$ java -jar fmw_12.2.1.3.0_wls.jar -silent -responseFile /app/bea12c3/weblogi ...

  6. “无法从节点xx检索exectask的版本” 原因分析

    客户有一套部署在Window 2008 R2 sp环境下的12.1.0.2 RAC环境,该RAC基于策略管理.因为业务需要,现在需要更换部分设备——踢出两台2路的服务器(节点名称分别为racnode2 ...

  7. 【springcloud】Transaction rolled back because it has been marked as rollback-only

    问题: 一个ajax请求,发生系统错误,错误内容:Transaction rolled back because it has been marked as rollback-only 原因是调用的s ...

  8. 【记录】【windows】下查看端口是否被占用并杀死该进程

    查看端口是否被占用 netstat -aon|findstr "端口号" 比如 netstat -aon|findstr "6340" 杀死该进程 taskki ...

  9. vue脚手架(vue-cli)老版本(2.xx版)的使用

    1. 在idea新建一个Static Web项目 2. 在新建的项目下打开cmd 3. 输入安装脚手架命令:npm install -g vue-cli 4. 查看安装的版本:vue -V   (2. ...

  10. 关于nslookup以及dig命令的研究报告

    我们在日常上网时都是用域名访问网路,如www.baidu.com,而在实际寻址过程中,是使用IP地址,如180.101.49.11,域名到IP地址的解析是通过DNS服务器来实现的,系统中我们可以用一些 ...