首页 > 代码库 > 某次数据迁移简记
某次数据迁移简记
数据迁移,倒腾了好几天,全因当初库恶心的设计--库未设置编码,同一个库表的编码还不一致。
哎~给别人擦屁股真不是件好事。
## 安装mysql
## 如果mysql无法导入gb2312编码的数据,可能因为安装时执行./configure 编译时未指定gb2312选项,
## 参见:http://blog.chinaunix.net/uid-20494084-id-3232230.html
[root@server1 ~]# ./configure --prefix=/usr/local/mysql/ --with-extra-charsets=all --with-charset=gb2312 --with-charset=gbk --with-charset=utf8
## 冷备及冷恢复
## 如果库非常大,则可以考虑复制库文件(目录) ## 冷备前,最好关闭mysql服务 [root@server1 ~]# service mysqld stop 或 [root@server1 ~]# /usr/local/mysql/support-files/mysql.server stop ## 库保存在$mysql/data或my.cnf的datadir指定位置 ## 用tar压缩后,库体积能缩小不少 [root@server1 ~]# cp -r analysedb /usr/local/mysql/data ## 复制完成后,需要修改库文件拥有者,否则mysql会报权限错误 [root@server1 ~]# 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语句上指定下编码
[root@server1 ~]# ./mysqldump -uroot -p123456 -B --hex-blob --default-character-set=gbk analysedb > /tmp/analysedb.gbk.sql
## 如果库中的表,编码不一致,则最好按编码分别导出
[root@server1 ~]# ./mysqldump -uroot -p123456 --hex-blob --default-character-set=gbk analysedb t_user t_monitor > /tmp/analysedb.part.gbk.sql 或 [root@server1 ~]# ./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
某次数据迁移简记
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。