数据迁移,倒腾了好几天,全因当初库恶心的设计--库未设置编码,同一个库表的编码还不一致。
哎~给别人擦屁股真不是件好事。
## 安装mysql 5.6
## 如果mysql无法导入gb2312编码的数据,可能因为执行mysql 的./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配置(以mysql 5.6为准,5.5的配置有所不同)
## 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