· 背景
? ? 公司要把一些老設(shè)備退服,一些陪伴我多年的 DB 要下線了,舍不得。正好借此機(jī)會,手賤把自己 3 個"回收站" DB 遷移到 MySQL 上,也算是趕一把時髦。等真正看著這些老設(shè)備下線了的那一天,也會不盡感嘆一個時代結(jié)束了。
· 心得
- 芒果:愛你不容易,開始我想是往上遷,因?yàn)槲臋n多 /API 多,游刃有余,支持不規(guī)則列,最符合我的需要。可惜,除了字符集之外。。。詳見后面第 7 點(diǎn)。
- 共享 OR 獨(dú)立:最早碰到的問題當(dāng)屬目標(biāo)數(shù)據(jù)庫的容量和存儲設(shè)計,兩者表空間管理上各有優(yōu)勢。開始一心想用 Raw 設(shè)備 +innodb ,但發(fā)現(xiàn)在共享和獨(dú)立表空間上出現(xiàn)了卡殼,共享表空間可以發(fā)揮 RAW 設(shè)備優(yōu)勢,但是獨(dú)立表空間怎么配置貌似都無法支持。不過好在我的單表 MAX 大約 15G ,最大記錄數(shù)在 7E 不到。算了還是圖方便,獨(dú)立吧,棄用 RAW 。大家遷移前可以 MAX 下原表 dba_segments 。對未來也算有個數(shù)了。
- EXT3 OR EXT4 :由于沒有了 RAW 設(shè)備,在建盤的時候沒有多想,等命令敲下去,發(fā)現(xiàn)建成 EXT3 ,于是找理由安慰自己。有機(jī)會再改 EXT4 吧。
- DATE 轉(zhuǎn) DATETIME/TIMESTAMP :這個算是比較麻煩的,原先無論是 C/JAVA 的函數(shù)還是 CONTROLFILE ,對于日期時間處理都能個性化設(shè)置,方便了外部程序的各種時間形式。但當(dāng)入 MYSQL 表時候就得嚴(yán)格遵守了,尤其是 LOAD DATA ,找了半天也沒找到 SKIP ,這點(diǎn)上 ORACLE 還是比較厚道的。好吧,只能這樣了。一個個程序得改。
- WITHOUT UPDATE PID FILE :我 X ,真心迷宮啊。最早是在自己 VM+CENTOS 上測試,一改數(shù)據(jù)目錄就報錯了,最后發(fā)現(xiàn)居然是 SELINUX 的問題。紅帽默認(rèn) DISABLE ,良心啊。改完之后,各種破壞測試一路推平。
- DBLINK :這個東西純技術(shù)角度上將是個神器,但管理上會有很大麻煩。為了遷移歷史數(shù)據(jù),當(dāng)然希望是越方便越好,有 ORACLE 到 MYSQL 的,但反向的沒有。怎么辦呢?之后自己動手寫腳本遷移。話說 ORACLE 收購了它也有段時日了,怎么不融通一下呢?
- 圖形工具:又一個大坑。個人信仰:"任何再 NB 的軟件,最終無法逃不了用戶 CTRL+C/CTRL+V 的雙指"。最直接的問題,我也復(fù)制 1~N 列怎么辦?我要智能聯(lián)想怎么辦?。有時候,個人覺得 ORACLE 的成功之后 80% 歸功于 PL/SQL 。這個需求到 MYSQL 上理所當(dāng)然需要繼承。于是從各種 GUI 工具試了一把,最終選定了 Navicat 。
- SHOW PARAMETERS :從 ORACLE 改 MYSQL ,當(dāng)然這一關(guān)少不了。粗糙點(diǎn)講: SGA 按比例擴(kuò)大后打 9 折設(shè)定 INNODB_BUFFER_POOL,REDOLOG 按比例擴(kuò)大設(shè)定 LOG_BUFFER 。其他自己按需微調(diào)吧。
- PROC/FUNCTION :這塊原來庫中用的不多,暫時先按著新語法改。另外一些 VARCHAR 最長 LENGTH INDEX 就不多說了。
- DDL : ORACLE 比較厚道也比較蛋疼,我也比較懶,最好一鍵把 DDL+INDEX 結(jié)構(gòu)導(dǎo)入新表,這個會有很多細(xì)節(jié)上麻煩,算了,還是自己弄個 SHELL 過渡過去吧。小心 INDEX 。
- 八國聯(lián)軍: Oracle 確實(shí)很強(qiáng)大,也充分展現(xiàn)著美帝強(qiáng)大的霸權(quán)主義,眼紅什么買什么。切記:人心不足蛇吞象,難怪股價上不去。
最后,我把整個操作中的過程展現(xiàn)一下,供感興趣的朋友參考,輕拍磚 ~ !
?
· 命令日志(從無到有,供參考)
==準(zhǔn)備素材==
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
==準(zhǔn)備盤==
mkdir /mydata chown mysql:mysql -R /mydata 關(guān)機(jī)加盤 fdisk -l認(rèn)盤 fdisk /dev/sdb 輸入m、輸入n、輸入PrimaryPartID,2,回車到底,輸入w start_udev 為后續(xù)RawDevice做準(zhǔn)備 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參數(shù)調(diào)整==
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
?
?
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯(lián)系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
