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中while true的使用
Oct 13 Python
Eclipse和PyDev搭建完美Python开发环境教程(Windows篇)
Nov 16 Python
Python中with及contextlib的用法详解
Jun 08 Python
Django后台获取前端post上传的文件方法
May 28 Python
Python从ZabbixAPI获取信息及实现Zabbix-API 监控的方法
Sep 17 Python
对Python random模块打乱数组顺序的实例讲解
Nov 08 Python
利用python修改json文件的value方法
Dec 31 Python
Python实现带下标索引的遍历操作示例
May 30 Python
Python datetime 格式化 明天,昨天实例
Mar 02 Python
Python小白学习爬虫常用请求报头
Jun 03 Python
python爬虫调度器用法及实例代码
Nov 30 Python
python编写函数注意事项总结
Mar 29 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 强制下载文件代码
2010/10/24 PHP
《PHP编程最快明白》第七讲:php图片验证码与缩略图
2010/11/01 PHP
linux下安装php的memcached客户端
2014/08/03 PHP
PHP合并数组函数array_merge用法分析
2017/02/17 PHP
php实现根据身份证获取精准年龄
2020/02/26 PHP
jQuery 注意事项 与原因分析
2009/04/24 Javascript
javscript对象原型的一些看法
2010/09/19 Javascript
js focus不起作用的解决方法(主要是因为dom元素是否加载完成)
2010/11/05 Javascript
Select标签下拉列表二级联动级联实例代码
2014/02/07 Javascript
jquery等待效果示例
2014/05/01 Javascript
js判断手机号运营商的方法
2015/10/23 Javascript
Javascript从数组中随机取出不同元素的两种方法
2016/09/22 Javascript
深入理解JS实现快速排序和去重
2016/10/17 Javascript
关于angularJs指令的Scope(作用域)介绍
2016/10/25 Javascript
node.js 用socket实现聊天的示例代码
2017/10/17 Javascript
使用bootstrap实现下拉框搜索功能的实例讲解
2018/08/10 Javascript
解决vue-cli项目打包出现空白页和路径错误的问题
2018/09/04 Javascript
详解vue2.6插槽更新v-slot用法总结
2019/03/09 Javascript
element ui分页多选,翻页记忆的实例
2019/09/03 Javascript
JS获取表格视图所选行号的ids过程解析
2020/02/21 Javascript
JS实现横向跑马灯效果代码
2020/04/20 Javascript
[07:26]2015国际邀请赛第二日TOP10集锦
2015/08/06 DOTA
Python读取MRI并显示为灰度图像实例代码
2018/01/03 Python
简单实现python收发邮件功能
2018/01/05 Python
python 实现将字典dict、列表list中的中文正常显示方法
2018/07/06 Python
Flask框架学习笔记之表单基础介绍与表单提交方式
2019/08/12 Python
Python切图九宫格的实现方法
2019/10/10 Python
python GUI库图形界面开发之PyQt5切换按钮控件QPushButton详细使用方法与实例
2020/02/28 Python
丝绸和人造花卉、植物和树木:Nearly Natural
2018/11/28 全球购物
系统管理员的职责包括那些?管理的对象是什么?
2013/01/18 面试题
党员政治学习材料
2014/05/14 职场文书
杭州西湖英语导游词
2015/02/03 职场文书
2019年销售人员的职业生涯规划书
2019/03/25 职场文书
python内置进制转换函数的操作
2021/06/02 Python
Python各协议下socket黏包问题原理
2022/04/12 Python
Django框架之路由用法
2022/06/10 Python