mysql 通過遷移某個庫的目錄來擴容

賀子_DBA時代發表於2017-01-17
問題描述:現在有一套主主複製的mysql資料庫,資料檔案目錄超過97%,嚴重不足,需要馬上進行處理,我們知道mysql資料庫資料檔案目錄不能動態的去改變,不像oracle那樣可以直接更改資料檔案的目錄,下面展示一種比較好的擴大mysql資料檔案目錄的方法:
這套庫是利用keepalived ,來提供一個vip,然後業務連線這個vip(這裡的vip為192.***118),如下檢視vip的位置,它現在在S244上,說i明目前的S244,
[root@S244 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
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: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
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: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
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: eth2: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
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 eth2
[root@S243 keepalived]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
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: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
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: eth1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
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: eth2: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN qlen 1000
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 eth2
[root@S244 keepalived]#
那麼好,下面展示具體操作流程:
我打算移動一個庫的目錄到另一個空間充足的路徑下。
在運算元據庫之前,應該先和系統工程溝通好,先停掉相關的服務。
一)首先操作從庫;
1,關閉主從複製
mysql> stop slave;
2,關閉mysql服務,注意有的時候是:service mysqld stop
[root@S243 ~]# service mysql stop
3,我們知道一個庫對應一個子目錄,經過對比,我決定把mailer 庫移動到另一個目錄 /mysql2
1)[root@S243 ~]#cd /mysql/datadir
2)[root@S243 datadir]# cp -r mailer /mysql2/mailer ----把整個目錄 mailer 複製到/mysql2,並且起名字也為mailer.
3)確定複製成功後,刪除原來在/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,啟動資料庫.
[root@S243 ~]# service mysql start
5,開啟主從複製,並檢查相關程式的狀態,均為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
。。。。。。
到此從庫的操作結束。。。。
針對主庫的操作和從庫的操作一樣,需要注意的我們這臺主主複製的mysql.通過keepalived設定出了一個vip 118 ,寫的業務是通過連線vip登入資料庫的,我們可以保證寫的業務不受影響,因為vip所在的那臺伺服器就是主mysql,當這臺mysql死掉後,vip就自動轉移到另一臺伺服器上了,依舊保持正常的寫入的業務,
然後我關注的是vip轉移的觸發條件:我們都知道keepalived 監控著的服務死掉,會觸發vip遷移,還有就是keepalived 的服務停掉也會觸發vip漂移,
1).關閉keepalived 會觸發vip飄到另一臺伺服器,
[root@S244 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
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: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
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
再次檢視果然沒有了 118那個vip
[root@S244 ~]# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 16436 qdisc noqueue state UNKNOWN
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: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
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
可是當再次[root@S244 ~]# service keepalived start之後,vip118又再次飄回到這裡了。原來keepalived 配置檔案裡有個引數 priority 是優先順序,如下發現是s244這臺機器的優先順序更高 priority 100高於 priority 50,並且還有個引數nopreempt代表優先順序別高的不要搶佔vip, 預設是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 eth1 label eth1: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 #每個2秒檢查一次real_server狀態
lb_algo wrr #LVS演算法
lb_kind DR #LVS模式
persistence_timeout 60 #會話保持時間
protocol TCP
real_server 192.168.0.243 3306 {
weight 3
notify_down /var/lib/mysql/mysql_kpa.sh #檢測到服務down後執行的指令碼
TCP_CHECK {
connect_timeout 10 #連線超時時間
nb_get_retry 3 #重連次數
delay_before_retry 3 #重連間隔時間
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 eth1 label eth1: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 #每個2秒檢查一次real_server狀態
lb_algo wrr #LVS演算法
lb_kind DR #LVS模式
persistence_timeout 60 #會話保持時間
protocol TCP
real_server 192.168.0.244 3306 {
weight 3
notify_down /var/lib/mysql/mysql_kpa.sh #檢測到服務down後執行的指令碼
TCP_CHECK {
connect_timeout 10 #連線超時時間
nb_get_retry 3 #重連次數
delay_before_retry 3 #重連間隔時間
connect_port 3306 #健康檢查埠
}
}
總結:mysql資料庫的空間空間可擴充套件性還是比oracle要差點,所以針對mysql資料庫前期的準備和預估工作很重要,你需要更準確的預估出未來一段時間的空間增幅,以便於預留出更加準確的空間,因為mysql空間擴充套件是需要停服務的,並且存在一定的風險,





















來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29654823/viewspace-2132579/,如需轉載,請註明出處,否則將追究法律責任。

相關文章