某次数据迁移简记

数据迁移,倒腾了好几天,全因当初库恶心的设计--库未设置编码,同一个库表的编码还不一致。

哎~给别人擦屁股真不是件好事。

## 安装mysql

## 如果mysql无法导入gb2312编码的数据,可能因为安装时执行./configure 编译时未指定gb2312选项,

## 参见:http://blog.chinaunix.net/uid-20494084-id-3232230.html

[[email protected] ~]# ./configure  --prefix=/usr/local/mysql/   --with-extra-charsets=all 
  --with-charset=gb2312  --with-charset=gbk  --with-charset=utf8

## 冷备及冷恢复

## 如果库非常大,则可以考虑复制库文件(目录)
## 冷备前,最好关闭mysql服务
[[email protected] ~]# service mysqld stop 
或
[[email protected] ~]# /usr/local/mysql/support-files/mysql.server stop
## 库保存在$mysql/data或my.cnf的datadir指定位置
## 用tar压缩后,库体积能缩小不少
[[email protected] ~]# cp -r analysedb /usr/local/mysql/data
## 复制完成后,需要修改库文件拥有者,否则mysql会报权限错误
[[email protected] ~]# chown -R mysql.mysql /usr/local/mysql/data/analysedb

## 创建库时指定编码

mysql> CREATE DATABASE IF NOT EXISTS `yourdb` DEFAULT CHARSET utf8 COLLATE utf8_general_ci;
或
mysql> CREATE DATABASE `yourdb` DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci;

## --hex-blob 如果导出数据时有二进制(blob),则需要加--hex-blob

## --default-character-set=gbk如果你的库编码与mysql不一致,最好指定一下

## -B 导出库结构。如果mysql与库编码不一致,最好指定在CREATE DATABASE语句上指定下编码

[[email protected] ~]# ./mysqldump -uroot -p123456 -B --hex-blob --default-character-set=gbk analysedb > /tmp/analysedb.gbk.sql

## 如果库中的表,编码不一致,则最好按编码分别导出

[[email protected] ~]# ./mysqldump -uroot -p123456 --hex-blob --default-character-set=gbk analysedb t_user t_monitor > /tmp/analysedb.part.gbk.sql
或
[[email protected] ~]# ./mysqldump -uroot -p123456 --hex-blob --default-character-set=utf8 analysedb t_user t_monitor > /tmp/analysedb.part.utf8.sql

## my.cnf配置

## max_allowed_packet: 如果要导入数据量比较大,最好修改此选项

## character-set-server=utf8: 如果不指定此项,则mysql默认字符集采用latin1(也就是iso8859-1)

[client]
default-character-set=utf8
port = 3307
socket = /var/run/mysqld/mysql-slave.sock
[mysqld]
character-set-server=utf8
port = 3307
datadir = /data/3307/data
socket = /var/run/mysqld/mysql-slave.sock
skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 16M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
max_connections=5000
server_id=100
log-bin=mysql-bin-100
binlog-ignore-db=mysql
binlog-ignore-db = test
binlog-ignore-db = information_schema
binlog-ignore-db = performance_schema
relay_log_recovery = 1
binlog_format=mixed
skip-name-resolve
skip-external-locking
log_slave_updates = 1
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[mysql]
default-character-set=utf8
no-auto-rehash

## 显示创建表结构信息

mysql> SHOW CREATE TABLE `analysedb`.`t_user`;

## 修改表信息

mysql> ALTER TABLE `analysedb`.`t_user` DEFAULT CHARSET=utf8;

## 修改字段信息

mysql> ALTER TABLE `analysedb`.`t_user`  CHANGE COLUMN `username` `username` varchar(128) CHARACTER SET utf8 NULL DEFAULT NULL;

## 显示指定库的表信息

mysql> use information_schema;
mysql> select table_name from tables where table_schema=‘analysedb‘ order by table_collation,table_name;

## 导入数据

mysql> source /tmp/analysedb.part.utf8.sql
mysql> source /tmp/analysedb.part.gbk.sql
时间: 2024-08-28 12:40:01

某次数据迁移简记的相关文章

Code First Migrations更新数据库结构(数据迁移) 【转】

背景 code first起初当修改model后,要持久化至数据库中时,总要把原数据库给删除掉再创建(DropCreateDatabaseIfModelChanges),此时就会产生一个问题,当我们的旧数据库中包含一些测试数据时,当持久化更新后,原数据将全部丢失,故我们可以引入EF的数据迁移功能来完成. 要求 已安装NuGet 过程示例 [csharp] view plaincopyprint? //原model //原model [csharp] view plaincopyprint? us

数据迁移,iis的各种坑

最近在搞iis发布  本来在家里实验过很多次 都是可以的 觉得很容易!但是到客户现场去试的时候发现各种坑 在这里给大家说说  望大家注意点哈! 首先:数据迁移先是备份数据库,然后再还原  这个地方一定要注意数据库版本问题,比如你如果在sqlserver2012上备份的,到sqlserver2008版本上还原就不行,因为这是高版本还原到低版本了 就不兼容,但是低版本还原到高版本就可以! 第二步:还原好了数据库,vs代码要配置服务器了,也要注意个问题:因为vs配置的是sqlserver的sql认证账

EF数据迁移,未将对象引用设置到对象实例

现象: 执行Enable-Migrations -force时就报"未将对象引用设置到对象实例"的异常: DbProviderServicesExtensions.GetProviderManifestTokenChecked 原因: 1.项目启动项的App.config或web.config里面没有配置 entityFramework节点或connectionStrings节点,EF在数据迁移时找不到数据库连接串信息 2.项目启动项配置错误,应该选择有entityFramework节

SQL SERVER几种数据迁移/导出导入的实践

SQLServer提供了多种数据导出导入的工具和方法,在此,分享我实践的经验(只涉及数据库与Excel.数据库与文本文件.数据库与数据库之间的导出导入). (一)数据库与Excel 方法1: 使用数据库客户端(SSMS)的界面工具.右键选择要导出数据的数据库,选择“任务”——“导出数据”,下图1,按照向导一步一步操作即可.而导入则相反,导入时,SQLServer会默认创建一张新表,字段名也默认跟导入的Excel标题一样,并且会默认字段数据类型等.当然在可以在向导进行修改.需要注意的是如果标题不是

mysql5.1.33到mysql5.5.33数据迁移的过程中要注意的问题

背景:公司要把测试库mysql5.1.33上面的数据迁移到mysql5.5.33上面,5.1上面的表大都是myisam表,为了尽量让数据一致,用了--lock-all-table选项 注意事项: 1,可以先导权限表,这样就可以把业务迁移到已经导成功的那一部份库上面 2,导之前要先把binlog禁掉,这样导入的速度会快一些,set global sql_log_bin=OFF,没有禁用binlog的情况下每小时大约只能导1G多的数据.禁用binlog后每个小时大概可以导入20G的数据 3,选择in

Django模型修改及数据迁移

Migrations Django中对Model进行修改是件麻烦的事情,syncdb命令仅仅创建数据库里还没有的表,它并不对已存在的数据表进行同步修改,也不处理数据模型的删除. 如果你新增或修改数据模型里的字段,或是删除了一个数据模型,你需要手动在数据库里进行相应的修改或者使用South.Django 1.7中已经集成了South的代码,提供了3个新命令: migrate: 用于执行迁移动作,具有syncdb的功能 makemigrations: 基于当前的model创建新的迁移策略文件 sql

mysql数据迁移

一. 数据迁移简介所谓的数据迁移,就是指将原有的数据库系统迁移到另外一个业务系统上数据迁移的原因是多种多样的,有可能是业务变更.硬件升级.平台切换或升级mysql数据库 迁移的注意事项:(1).相同版本可以迁移(2).注意版本可以使用的引擎(3).低版本可以向高版本进行数据迁移,高版本一般兼容低版本的特性(4).高版本的数据不能向低版本进行数据迁移,会出现数据不兼容的情况(5).迁移是请注意导出数据和备份数据,出现迁移失败时,立即启动备份方案,保证公司业务的正常运行(6).在数据迁移时,要选择用

数据迁移实战:基于Kettle的Mysql到DB2的数据迁移

From:https://my.oschina.net/simpleton/blog/525675 一.什么是ETL ETL,是英文 Extract-Transform-Load 的缩写,用来描述将数据从来源端经过抽取(extract).转换(transform).加载(load)至目的端的过程.ETL一词较常用在数据仓库,但其对象并不限于数据仓库. 二.Kettle简单说明 Kettle是一款国外开源的ETL工具,纯java编写,可以在Window.Linux.Unix上运行,数据抽取高效稳定

Redis数据迁移方案

场景 Redis实例A ---> Redis实例B,整库全量迁移 方案一: mac环境 brew install npm npm install redis-dump -g 针对RedisA: redis-dump -h host1 -p 6379 -d 1 --json > mydb.json针对RedisB: cat mydb.json | redis-dump --convert | redis-cli 方案二:参考: http://www.zlovezl.cn/articles/mig