python批量导出导入MySQL用户的方法


Posted in Python onNovember 15, 2013

数据库迁移(A -> B),需要把用户也迁移过去,而用户表(mysql.user)有上百个用户。有2种方法进行快速迁移:
1,在同版本的条件下,直接备份A服务器的mysql数据库,还原到B服务器。
2,要是不同版本的数据(5.1 -> 5.5),很可能mysql数据库下面的一些表结构,甚至表数据的默认值都不一样,按照1的方法进行迁移,虽然最后也是可以正常访问,但是还是有些不太放心,很可能会影响到了B服务器上的MySQL,这样就需要用命令行来生成帐号了,这样是最安全和放心的。下面用python脚本来进行批量导出:

#!/bin/env python
# -*- encoding: utf-8 -*-
#-----------------------------------------
# Name:        mysql_user_dump.py
# Purpose:     批量导出用户
# Author:      zhoujy
# Created:     2013-05-28
#-----------------------------------------
import MySQLdb
def get_data(conn):
    query  = 'select user,host from mysql.user order by user'
    cursor = conn.cursor()
    cursor.execute(query)
    lines  = cursor.fetchall()
    return lines
def output_data(conn,rows):
    for user,host in rows:
        query  = "show grants for '%s'@'%s'" %(user,host)
        cursor = conn.cursor()
        cursor.execute(query)
        show_pri = cursor.fetchall()
        for grants_command in show_pri:
            print ''.join(grants_command)+';'
        print ''
if __name__ =='__main__':
    conn = MySQLdb.connect(host='localhost',user='root',passwd='123456',db='mysql',port=3306,charset='utf8')
    rows  = get_data(conn)
    output_data(conn,rows)

运行:python mysql_user_dump.py

GRANT REPLICATION SLAVE ON *.* TO 'rep'@'192.168.234.%' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' WITH GRANT OPTION;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.234.%' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9';
GRANT USAGE ON *.* TO 'test'@'192.168.234.%' IDENTIFIED BY PASSWORD '*2A032F7C5BA932872F0F045E0CF6B53CF702F2C5';
GRANT SELECT, INSERT, UPDATE, DELETE ON `test`.* TO 'test'@'192.168.234.%';
GRANT USAGE ON *.* TO 'zzz_test'@'192.168.234.%' IDENTIFIED BY PASSWORD '*2A032F7C5BA932872F0F045E0CF6B53CF702F2C5';
GRANT SELECT, INSERT, UPDATE, DELETE ON `zzz%`.* TO 'zzz_test'@'192.168.234.%';

最后把这些命令在B上面执行就好了,也可以在执行脚本的时候重定向到一个sql文件:如:user.sql,在到B服务器的数据库里面执行source user.sql 就完成了导入工作。
第2个方法最好,不需要1里面的删表和重建表的操作,最安全。

Python 相关文章推荐
python笔记(2)
Oct 24 Python
简单实现python爬虫功能
Dec 31 Python
pycharm中连接mysql数据库的步骤详解
May 02 Python
python使用Pycharm创建一个Django项目
Mar 05 Python
Selenium的使用详解
Oct 19 Python
python接口自动化(十六)--参数关联接口后传(详解)
Apr 16 Python
Python 处理文件的几种方式
Aug 23 Python
Django全局启用登陆验证login_required的方法
Jun 02 Python
解决Tensorflow2.0 tf.keras.Model.load_weights() 报错处理问题
Jun 12 Python
Pycharm添加虚拟解释器报错问题解决方案
Oct 13 Python
python基于pygame实现飞机大作战小游戏
Nov 19 Python
jupyter notebook指定启动目录的方法
Mar 02 Python
python连接MySQL、MongoDB、Redis、memcache等数据库的方法
Nov 15 #Python
python实现代理服务功能实例
Nov 15 #Python
Python(Tornado)模拟登录小米抢手机
Nov 12 #Python
Python3实现的腾讯微博自动发帖小工具
Nov 11 #Python
python正则分组的应用
Nov 10 #Python
python Django连接MySQL数据库做增删改查
Nov 07 #Python
使用Python下载Bing图片(代码)
Nov 07 #Python
You might like
PHP中数组的三种排序方法分享
2012/05/07 PHP
Codeigniter中集成smarty和adodb的方法
2016/03/04 PHP
javascript 二分法(数组array)
2010/04/24 Javascript
事件绑定之小测试  onclick && addEventListener
2011/07/31 Javascript
仿中关村在线首页弹出式广告插件(jQuery版)
2012/05/03 Javascript
js 获取时间间隔实现代码
2014/05/12 Javascript
JavaScript获得页面base标签中url的方法
2015/04/03 Javascript
JavaScript实现LI列表数据绑定的方法
2015/08/04 Javascript
快速使用Bootstrap搭建传送带
2016/05/06 Javascript
JS使用正则表达式实现关键字替换加粗功能示例
2016/08/03 Javascript
基于javascript实现按圆形排列DIV元素(一)
2016/12/02 Javascript
Django中使用jquery的ajax进行数据交互的实例代码
2017/10/15 jQuery
Vue CLI3.0中使用jQuery和Bootstrap的方法
2019/02/28 jQuery
js中arguments对象的深入理解
2019/05/14 Javascript
vue之a-table中实现清空选中的数据
2019/11/07 Javascript
[03:56]DOTA2完美大师赛趣味视频之小鸽子和Mineski打台球
2017/11/24 DOTA
用Python编写生成树状结构的文件目录的脚本的教程
2015/05/04 Python
Django框架中数据的连锁查询和限制返回数据的方法
2015/07/17 Python
Python 基础教程之str和repr的详解
2017/08/20 Python
Python基于matplotlib画箱体图检验异常值操作示例【附xls数据文件下载】
2019/01/07 Python
如何爬取通过ajax加载数据的网站
2019/08/15 Python
python内置函数sorted()用法深入分析
2019/10/08 Python
Jupyter notebook设置背景主题,字体大小及自动补全代码的操作
2020/04/13 Python
python 用pandas实现数据透视表功能
2020/12/21 Python
HTML5 WebSocket实现点对点聊天的示例代码
2018/01/31 HTML / CSS
NOTINO英国:在线购买美容和香水
2020/02/25 全球购物
Java中采用什么结构来捕获、处理异常?各子句的顺序、功能如何
2013/10/07 面试题
写演讲稿所需要注意的4个条件
2014/01/09 职场文书
幼儿园美术教学反思
2014/01/31 职场文书
贷款委托书范本
2014/04/08 职场文书
二手房买卖协议书
2014/04/10 职场文书
对照四风自我剖析材料
2014/10/07 职场文书
pandas取dataframe特定行列的实现方法
2021/05/24 Python
Python实现简单的猜单词
2021/06/15 Python
Vue vee-validate插件的简单使用
2021/06/22 Vue.js
Tomcat安装使用及部署Web项目的3种方法汇总
2022/08/14 Servers