您好,登錄后才能下訂單哦!
mysql如何通過遷移某個庫的目錄來擴容,相信很多沒有經驗的人對此束手無策,為此本文總結了問題出現的原因和解決方法,通過這篇文章希望你能解決這個問題。
問題描述:現在有一套主主復制的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: eth2: <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: eth3: <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 eth3
[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: eth2: <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: eth3: <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 eth3
[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 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 #每個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 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 #每個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空間擴展是需要停服務的,并且存在一定的風險,
看完上述內容,你們掌握mysql如何通過遷移某個庫的目錄來擴容的方法了嗎?如果還想學到更多技能或想了解更多相關內容,歡迎關注億速云行業資訊頻道,感謝各位的閱讀!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。