mysql如何通過(guò)遷移某個(gè)庫(kù)的目錄來(lái)擴(kuò)容,相信很多沒(méi)有經(jīng)驗(yàn)的人對(duì)此束手無(wú)策,為此本文總結(jié)了問(wèn)題出現(xiàn)的原因和解決方法,通過(guò)這篇文章希望你能解決這個(gè)問(wèn)題。
問(wèn)題描述:現(xiàn)在有一套主主復(fù)制的mysql數(shù)據(jù)庫(kù),數(shù)據(jù)文件目錄超過(guò)97%,嚴(yán)重不足,需要馬上進(jìn)行處理,我們知道m(xù)ysql數(shù)據(jù)庫(kù)數(shù)據(jù)文件目錄不能動(dòng)態(tài)的去改變,不像oracle那樣可以直接更改數(shù)據(jù)文件的目錄,下面展示一種比較好的擴(kuò)大mysql數(shù)據(jù)文件目錄的方法:
這套庫(kù)是利用keepalived ,來(lái)提供一個(gè)vip,然后業(yè)務(wù)連接這個(gè)vip(這里的vip為192.***118),如下查看vip的位置,它現(xiàn)在在S244上,說(shuō)i明目前的S244,
[root@S244 ~]# ip a
1: lo:
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0:
link/ether 00:26:2d:0d:50:42 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.244/24 brd 192.168.0.255 scope global eth0
inet 192.168.0.118/24 brd 192.168.0.255 scope global secondary eth0:1
inet6 fe80::226:2dff:fe0d:5042/64 scope link
valid_lft forever preferred_lft forever
3: eth2:
link/ether 00:26:2d:0d:50:43 brd ff:ff:ff:ff:ff:ff
inet6 fe80::226:2dff:fe0d:5043/64 scope link
valid_lft forever preferred_lft forever
4: eth3:
link/ether 00:26:2d:0d:50:41 brd ff:ff:ff:ff:ff:ff
inet 192.168.8.244/24 brd 192.168.8.255 scope global eth3
[root@S243 keepalived]# ip a
1: lo:
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0:
link/ether 00:26:2d:0d:50:42 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.244/24 brd 192.168.0.255 scope global eth0
inet6 fe80::226:2dff:fe0d:5042/64 scope link
valid_lft forever preferred_lft forever
3: eth2:
link/ether 00:26:2d:0d:50:43 brd ff:ff:ff:ff:ff:ff
inet6 fe80::226:2dff:fe0d:5043/64 scope link
valid_lft forever preferred_lft forever
4: eth3:
link/ether 00:26:2d:0d:50:41 brd ff:ff:ff:ff:ff:ff
inet 192.168.8.244/24 brd 192.168.8.255 scope global eth3
[root@S244 keepalived]#
那么好,下面展示具體操作流程:
我打算移動(dòng)一個(gè)庫(kù)的目錄到另一個(gè)空間充足的路徑下。
在操作數(shù)據(jù)庫(kù)之前,應(yīng)該先和系統(tǒng)工程溝通好,先停掉相關(guān)的服務(wù)。
一)首先操作從庫(kù);
1,關(guān)閉主從復(fù)制
mysql> stop slave;
2,關(guān)閉mysql服務(wù),注意有的時(shí)候是:service mysqld stop
[root@S243 ~]# service mysql stop
3,我們知道一個(gè)庫(kù)對(duì)應(yīng)一個(gè)子目錄,經(jīng)過(guò)對(duì)比,我決定把mailer 庫(kù)移動(dòng)到另一個(gè)目錄 /mysql2
1)[root@S243 ~]#cd /mysql/datadir
2)[root@S243 datadir]# cp -r mailer /mysql2/mailer ----把整個(gè)目錄 mailer 復(fù)制到/mysql2,并且起名字也為mailer.
3)確定復(fù)制成功后,刪除原來(lái)在/mysql的mailer目錄
[root@S243 datadir]# rm -rf mailer
4)修改 /mysql2/下的mailer的屬組,
[root@S243 mysql2]# chown -R mysql:mysql mailer
5)建立軟連接,到/mysql/datadir目錄
[root@S243 mysql2]# ln -s /mysql2/mailer /mysql/datadir/mailer
4,啟動(dòng)數(shù)據(jù)庫(kù).
[root@S243 ~]# service mysql start
5,開(kāi)啟主從復(fù)制,并檢查相關(guān)進(jìn)程的狀態(tài),均為yes為正常。
mysql> start slave;
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.0.244
Master_User: info_syncer
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.001358
Read_Master_Log_Pos: 643287297
Relay_Log_File: S243-relay-bin.001134
Relay_Log_Pos: 350
Relay_Master_Log_File: mysql-bin.001358
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
。。。。。。
到此從庫(kù)的操作結(jié)束。。。。
針對(duì)主庫(kù)的操作和從庫(kù)的操作一樣,需要注意的我們這臺(tái)主主復(fù)制的mysql.通過(guò)keepalived設(shè)置出了一個(gè)vip 118 ,寫(xiě)的業(yè)務(wù)是通過(guò)連接vip登錄數(shù)據(jù)庫(kù)的,我們可以保證寫(xiě)的業(yè)務(wù)不受影響,因?yàn)関ip所在的那臺(tái)服務(wù)器就是主mysql,當(dāng)這臺(tái)mysql死掉后,vip就自動(dòng)轉(zhuǎn)移到另一臺(tái)服務(wù)器上了,依舊保持正常的寫(xiě)入的業(yè)務(wù),
然后我關(guān)注的是vip轉(zhuǎn)移的觸發(fā)條件:我們都知道keepalived 監(jiān)控著的服務(wù)死掉,會(huì)觸發(fā)vip遷移,還有就是keepalived 的服務(wù)停掉也會(huì)觸發(fā)vip漂移,
1).關(guān)閉keepalived 會(huì)觸發(fā)vip飄到另一臺(tái)服務(wù)器,
[root@S244 ~]# ip a
1: lo:
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0:
link/ether 00:26:2d:0d:50:42 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.244/24 brd 192.168.0.255 scope global eth0
inet 192.168.0.118/24 brd 192.168.0.255 scope global secondary eth0:1
inet6 fe80::226:2dff:fe0d:5042/64 scope link
valid_lft forever preferred_lft forever
[root@S244 ~]# service keepalived stop
再次查看果然沒(méi)有了 118那個(gè)vip
[root@S244 ~]# ip a
1: lo:
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: eth0:
link/ether 00:26:2d:0d:50:42 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.244/24 brd 192.168.0.255 scope global eth0
inet6 fe80::226:2dff:fe0d:5042/64 scope link
valid_lft forever preferred_lft forever
可是當(dāng)再次[root@S244 ~]# service keepalived start之后,vip118又再次飄回到這里了。原來(lái)keepalived 配置文件里有個(gè)參數(shù) priority 是優(yōu)先級(jí),如下發(fā)現(xiàn)是s244這臺(tái)機(jī)器的優(yōu)先級(jí)更高 priority 100高于 priority 50,并且還有個(gè)參數(shù)nopreempt代表優(yōu)先級(jí)別高的不要搶占vip, 默認(rèn)是preempt搶占vip。
[root@S243 keepalived]# cat keepalived.conf
global_defs {
notification_email {
}
}
vrrp_instance VI_1 {
# state MASTER
state BACKUP
interface eth0
virtual_router_id 51
# priority 100
priority 50
mcast_src_ip 192.168.0.243
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
# 202.85.218.197 dev eth2 label eth2:1
192.168.0.118/24 broadcast 192.168.0.255 dev eth0 label eth0:1
}
virtual_server 192.168.0.118 3306 {
delay_loop 2 #每個(gè)2秒檢查一次real_server狀態(tài)
lb_algo wrr #LVS算法
lb_kind DR #LVS模式
persistence_timeout 60 #會(huì)話保持時(shí)間
protocol TCP
real_server 192.168.0.243 3306 {
weight 3
notify_down /var/lib/mysql/mysql_kpa.sh #檢測(cè)到服務(wù)down后執(zhí)行的腳本
TCP_CHECK {
connect_timeout 10 #連接超時(shí)時(shí)間
nb_get_retry 3 #重連次數(shù)
delay_before_retry 3 #重連間隔時(shí)間
connect_port 3306 #健康檢查端口
}
}
[root@S244 ~]# cat /etc/keepalived/keepalived.conf
global_defs {
notification_email {
}
}
vrrp_instance VI_1 {
# state BACKUP
state MASTER
interface eth0
virtual_router_id 51
# priority 50
priority 100
mcast_src_ip 192.168.0.244
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
# 202.85.218.197 dev eth2 label eth2:1
192.168.0.118/24 broadcast 192.168.0.255 dev eth0 label eth0:1
}
virtual_server 192.168.0.118 3306 {
delay_loop 2 #每個(gè)2秒檢查一次real_server狀態(tài)
lb_algo wrr #LVS算法
lb_kind DR #LVS模式
persistence_timeout 60 #會(huì)話保持時(shí)間
protocol TCP
real_server 192.168.0.244 3306 {
weight 3
notify_down /var/lib/mysql/mysql_kpa.sh #檢測(cè)到服務(wù)down后執(zhí)行的腳本
TCP_CHECK {
connect_timeout 10 #連接超時(shí)時(shí)間
nb_get_retry 3 #重連次數(shù)
delay_before_retry 3 #重連間隔時(shí)間
connect_port 3306 #健康檢查端口
}
}
mysql數(shù)據(jù)庫(kù)的空間空間可擴(kuò)展性還是比oracle要差點(diǎn),所以針對(duì)mysql數(shù)據(jù)庫(kù)前期的準(zhǔn)備和預(yù)估工作很重要,你需要更準(zhǔn)確的預(yù)估出未來(lái)一段時(shí)間的空間增幅,以便于預(yù)留出更加準(zhǔn)確的空間,因?yàn)閙ysql空間擴(kuò)展是需要停服務(wù)的,并且存在一定的風(fēng)險(xiǎn),
看完上述內(nèi)容,你們掌握mysql如何通過(guò)遷移某個(gè)庫(kù)的目錄來(lái)擴(kuò)容的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)-成都網(wǎng)站建設(shè)公司行業(yè)資訊頻道,感謝各位的閱讀!