脱O把妹,记录这一周来迁移至MySQL的一些心得
· 背景
公司要把一些老设备退服,一些陪伴我多年的DB要下线了,舍不得。正好借此机会,手贱把自己3个"回收站"DB迁移到MySQL上,也算是赶一把时髦。等真正看着这些老设备下线了的那一天,也会不尽感叹一个时代结束了。
· 心得
- 芒果:爱你不容易,开始我想是往上迁,因为文档多/API多,游刃有余,支持不规则列,最符合我的需要。可惜,除了字符集之外。。。详见后面第7点。
- 共享OR独立:最早碰到的问题当属目标数据库的容量和存储设计,两者表空间管理上各有优势。开始一心想用Raw设备+innodb,但发现在共享和独立表空间上出现了卡壳,共享表空间可以发挥RAW设备优势,但是独立表空间怎么配置貌似都无法支持。不过好在我的单表MAX大约15G,最大记录数在7E不到。算了还是图方便,独立吧,弃用RAW。大家迁移前可以MAX下原表dba_segments。对未来也算有个数了。
- EXT3 OR EXT4:由于没有了RAW设备,在建盘的时候没有多想,等命令敲下去,发现建成EXT3,于是找理由安慰自己。有机会再改EXT4吧。
- DATE转DATETIME/TIMESTAMP:这个算是比较麻烦的,原先无论是C/JAVA的函数还是CONTROLFILE,对于日期时间处理都能个性化设置,方便了外部程序的各种时间形式。但当入MYSQL表时候就得严格遵守了,尤其是LOAD DATA,找了半天也没找到SKIP,这点上ORACLE还是比较厚道的。好吧,只能这样了。一个个程序得改。
- WITHOUT UPDATE PID FILE:我X,真心迷宫啊。最早是在自己VM+CENTOS上测试,一改数据目录就报错了,最后发现居然是SELINUX的问题。红帽默认DISABLE,良心啊。改完之后,各种破坏测试一路推平。
- DBLINK:这个东西纯技术角度上将是个神器,但管理上会有很大麻烦。为了迁移历史数据,当然希望是越方便越好,有ORACLE到MYSQL的,但反向的没有。怎么办呢?之后自己动手写脚本迁移。话说ORACLE收购了它也有段时日了,怎么不融通一下呢?
- 图形工具:又一个大坑。个人信仰:"任何再NB的软件,最终无法逃不了用户CTRL+C/CTRL+V的双指"。最直接的问题,我也复制1~N列怎么办?我要智能联想怎么办?。有时候,个人觉得ORACLE的成功之后80%归功于PL/SQL。这个需求到MYSQL上理所当然需要继承。于是从各种GUI工具试了一把,最终选定了Navicat。
- SHOW PARAMETERS:从ORACLE改MYSQL,当然这一关少不了。粗糙点讲:SGA按比例扩大后打9折设定INNODB_BUFFER_POOL,REDOLOG按比例扩大设定LOG_BUFFER。其他自己按需微调吧。
- PROC/FUNCTION:这块原来库中用的不多,暂时先按着新语法改。另外一些VARCHAR最长LENGTH INDEX就不多说了。
- DDL:ORACLE比较厚道也比较蛋疼,我也比较懒,最好一键把DDL+INDEX结构导入新表,这个会有很多细节上麻烦,算了,还是自己弄个SHELL过渡过去吧。小心INDEX。
- 八国联军:Oracle确实很强大,也充分展现着美帝强大的霸权主义,眼红什么买什么。切记:人心不足蛇吞象,难怪股价上不去。
最后,我把整个操作中的过程展现一下,供感兴趣的朋友参考,轻拍砖~!
· 命令日志(从无到有,供参考)
==准备素材==
vim /etc/selinux/config SELINUX=disabled Yum –e mysql* Yum install –y cron* /etc/init.d/crond restart cd /usr/share/selinux setenforce 0 tar -xvf MySQL-5.6.12-1.el6.x86_64.rpm-bundle.tar rpm -qa|grep -i mysql yum -y remove mysql-libs* rpm -e mysql* rpm -ivh MySQL-server-5.6.12-1.el6.x86_64.rpm rpm -ivh MySQL-client-5.6.12-1.el6.x86_64.rpm rpm -ivh MySQL-devel-5.6.12-1.el6.x86_64.rpm service mysql stop cp ./usr/share/doc/MySQL-server-5.6.12/my-default.cnf /etc/my.cnf vim /etc/my.cnf
==准备盘==
mkdir /mydata chown mysql:mysql -R /mydata 关机加盘 fdisk -l认盘 fdisk /dev/sdb 输入m、输入n、输入PrimaryPartID,2,回车到底,输入w start_udev 为后续RawDevice做准备 vgcreate -s 4M datavg /dev/sdb lvcreate -L 980M -n data_lv datavg mke2fs -j -b 4096 /dev/datavg/data_lv mount -t ext4 /dev/datavg/data_lv /mydata mv /var/lib/mysql /mydata vim /etc/fstab /dev/mapper/datavg-data_lv /mydata ext3 defaults 0 0 Reboot 测试,看自动加载。
==DB参数调整==
Service mysql stop Mv /var/lib/mysq /mydata mysql_install_db --user=mysql --datadir=/mydata chown –R mysql:mysql /mydata cat /root/.mysql_secret 拿密码: service mysql start mysql -u root –pxxxxx mysql mysql> UPDATE user SET Password=PASSWORD('111') where USER='root'; mysql> FLUSH PRIVILEGES; mysql> quit; alias pp='ps –ef|grep –i mysql' service mysql restart mysql -uroot -p111 mysql> SET PASSWORD = PASSWORD('123'); mysql> show variables like '%char%'; mysql> use mysql; mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.137.1' IDENTIFIED BY '123' WITH GRANT OPTION; mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.167.137.102' IDENTIFIED BY '123' WITH GRANT OPTION; mysql> select user,host from user; mysql> set sql_mode='no_auto_create_user,no_engine_substitution'; db2db.sh Reboot 测试,看能否自动启动。
==DB2DB.sh==
所在位置 https://github.com/zacard-orc/Zacard_DB2DB