Mysql的MHA實(shí)戰(zhàn)指南
前言
MHA(Master High Availability)是 MySQL 高可用領(lǐng)域主流方案,可實(shí)現(xiàn)主庫(kù)故障自動(dòng)切換與數(shù)據(jù)一致性保障,本文從原理到實(shí)戰(zhàn)詳解其部署與運(yùn)維全流程。
一、MHA簡(jiǎn)介
- MHA(Master High Availability)是一套優(yōu)秀的MySQL高可用環(huán)境下故障切換和主從復(fù)制的軟件。
- MHA 的出現(xiàn)就是解決MySQL 單點(diǎn)的問(wèn)題。
- MySQL故障切換過(guò)程中,MHA能做到0-30秒內(nèi)自動(dòng)完成故障切換操作。
- MHA能在故障切換的過(guò)程中最大程度上保證數(shù)據(jù)的一致性,以達(dá)到真正意義上的高可用。
二、MHA組件組成
- MHA Node(數(shù)據(jù)節(jié)點(diǎn))
MHA Node 運(yùn)行在每臺(tái) MySQL 服務(wù)器上。 - MHA Manager(管理節(jié)點(diǎn)) 檢測(cè)
MHA Manager 可以單獨(dú)部署在一臺(tái)獨(dú)立的機(jī)器上,管理多個(gè) master- slave 集群;也可以部署在一臺(tái) slave 節(jié)點(diǎn)上。
MHA Manager 會(huì)定時(shí)探測(cè)集群中的 master 節(jié)點(diǎn)。當(dāng) master 出現(xiàn)故障時(shí),它可以自動(dòng)將最新數(shù)據(jù)的 slave 提升為新的 master 然后將所有其他的 slave 重新指向新的 master。整個(gè)故障轉(zhuǎn)移過(guò)程對(duì)應(yīng)用程序完全透明。
三、MHA作用
- 自動(dòng)故障切換過(guò)程中,MHA試圖從宕機(jī)的主服務(wù)器上保存二進(jìn)制日志,最大程度的保證數(shù)據(jù)不丟失
- 使用半同步復(fù)制,可以大大降低數(shù)據(jù)丟失的風(fēng)險(xiǎn),如果只有一個(gè)slave已經(jīng)收到了最新的二進(jìn)制日志,MHA可以將最新的二進(jìn)制日志應(yīng)用于其他所有的slave服務(wù)器上,因此可以保證所有節(jié)點(diǎn)的數(shù)據(jù)一致性
- 目前MHA支持一主多從架構(gòu),最少三臺(tái)服務(wù),即一主兩從MHA Manger 管理多組主從復(fù)制。
四、MHA工作原理
MHA工作原理總結(jié)如下:
1、從宕機(jī)崩潰的master 保存二進(jìn)制日志事件(binlog events);
2、識(shí)別含有最新的更新 slave 日志
3、應(yīng)用差異的中繼日志(relay log)到其他的slave
4、應(yīng)用從master保存的二進(jìn)制日志事件
5、提升一個(gè) salve 為新的master
6、使其他的slave連接行的master 進(jìn)行復(fù)制。
五、mysql的MHA實(shí)戰(zhàn)
1、基礎(chǔ)環(huán)境準(zhǔn)備(搭建前提)
1.1、服務(wù)器規(guī)劃和系統(tǒng)配置
服務(wù)器規(guī)劃
MHA manager 節(jié)點(diǎn)服務(wù)器:centos7.9 manager/192.168.10.104 安裝MHA node和manager組件
master節(jié)點(diǎn)服務(wù)器: centos7.9 mysql1/192.168.10.105 安裝mysql5.7、MHA node 組件
slave1節(jié)點(diǎn)服務(wù)器: centos7.9 mysql2/192.168.10.106 安裝mysql5.7、MHA node 組件
slave2節(jié)點(diǎn)服務(wù)器: centos7.9 mysql3/192.168.10.107 安裝mysql5.7、MHA node 組件
1.2、系統(tǒng)配置
1)關(guān)閉防火墻和selinux(四個(gè)節(jié)點(diǎn)服務(wù)器都配置)
systemctl stop firewalld systemctl disable firewalld setenforce 0 getenforce
拓展-永久關(guān)閉增強(qiáng)服務(wù)配置:
vim /etc/sysconfig/selinux

2)設(shè)置主機(jī)名稱和主機(jī)名解析
#1在四臺(tái)節(jié)點(diǎn)分別更改主機(jī)名稱 hostnamectl set-hostname manager #192.168.10.104 hostnamectl set-hostname master #192.168.10.105 hostnamectl set-hostname slave1 #192.168.10.106 hostnamectl set-hostname slave2 #192.168.10.107 hostname #查看主機(jī)名稱 #2設(shè)置域名解析(四個(gè)節(jié)點(diǎn)都設(shè)置),內(nèi)容都為 vim /etc/hosts ##寫入 192.168.10.104 manager 192.168.10.105 master 192.168.10.106 slave1 192.168.10.107 slave2
3)所有節(jié)點(diǎn)同步系統(tǒng)時(shí)間
yum install ntp -y #先關(guān)閉ntp服務(wù),同步阿里云時(shí)間。 #防止ntpd服務(wù)開(kāi)啟占用udP的123端口和ntpdate沖突,導(dǎo)致同步失敗 systemctl stop ntpd ntpdate ntp.aliyun.com systemctl start ntpd
成功同步時(shí)間如下所示:

為什么設(shè)置時(shí)間同步?
時(shí)間不同步會(huì)導(dǎo)致 binlog、復(fù)制日志時(shí)間錯(cuò)亂,MHA 無(wú)法準(zhǔn)確判斷主從狀態(tài)。
1.3、部署Mysql并配置主從復(fù)制
1)編譯安裝mysql5.7且master開(kāi)啟binlog
master開(kāi)啟binlog(my.cnf中配置log_bin=master-bin、server-id=1,從庫(kù)配置server-id=2,server-id=3)
# 1安裝依賴 yum install -y gcc gcc-c++ ncurses ncurses-devel bison cmake # 2上傳文件mysql-5.7.17和boost_1_59_0到/opt/目錄,解壓壓縮包 cd /opt tar zxvf mysql-5.7.17.tar.gz -C /opt tar zxvf boost_1_59_0.tar.gz -C /usr/local/ mv /usr/local/boost_1_59_0 /usr/local/boost # 3定制mysql cd /opt/mysql-5.7.17/ cmake \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \ -DSYSCONFDIR=/etc \ -DSYSTEMD_PID_DIR=/usr/local/mysql \ -DDEFAULT_CHARSET=utf8 \ -DDEFAULT_COLLATION=utf8_general_ci \ -DWITH_EXTRA_CHARSETS=all \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \ -DMYSQL_DATADIR=/usr/local/mysql/data \ -DWITH_BOOST=/usr/local/boost \ -DWITH_SYSTEMD=1 # 4編譯安裝 # make && make install make -j 4 && make install # 4 指的是cpu核數(shù) “nproc輸出cpu核數(shù)” # 5創(chuàng)建程序用戶管理mysql useradd -s /sbin/nologin mysql chown -R mysql:mysql /usr/local/mysql/ # 6修改配置文件 #更改管理主/組 chown mysql:mysql /etc/my.cnf vim /etc/my.cnf # 寫入 [client] port = 3306 default-character-set=utf8 socket=/usr/local/mysql/mysql.sock [mysql] port = 3306 default-character-set=utf8 socket=/usr/local/mysql/mysql.sock auto-rehash [mysqld] user = mysql basedir=/usr/local/mysql datadir=/usr/local/mysql/data port = 3306 character-set-server=utf8 pid-file = /usr/local/mysql/mysqld.pid socket=/usr/local/mysql/mysql.sock bind-address = 0.0.0.0 skip-name-resolve max_connections=2048 default-storage-engine=INNODB max_allowed_packet=16M server-id = 1 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES # 7 設(shè)置mysql環(huán)境變量 echo "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile source /etc/profile # 8初始化數(shù)據(jù)庫(kù) cd /usr/local/mysql/bin/ ./mysqld \ --initialize-insecure \ --user=mysql \ --basedir=/usr/local/mysql \ --datadir=/usr/local/mysql/data # 9 啟動(dòng)服務(wù) # 將 MySQL 注冊(cè)為 Linux 系統(tǒng)的 systemd 管理服務(wù) # 復(fù)制 MySQL 的 systemd 服務(wù)配置文件到系統(tǒng)默認(rèn)目錄 cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/ systemctl daemon-reload #刷新識(shí)別 systemctl start mysqld.service #開(kāi)啟服務(wù) systemctl enable mysqld #開(kāi)機(jī)自啟動(dòng) netstat -anpt | grep 3306 #查看端口 # 10 設(shè)置賬號(hào)密碼登入 #給root賬號(hào)設(shè)置密碼,跳出確認(rèn)選項(xiàng)-->直接回車 mysqladmin -u root -p password "123456" #登錄 mysql -u root -p123456
- 配置主從復(fù)制
master服務(wù)器配置
# 1 修改my.cnf配置 vi /etc/my.cnf # 寫入 server-id = 1 log_bin=master-bin #開(kāi)啟二進(jìn)制文件 log_slave-updates=true #開(kāi)啟從服務(wù)器日志同步 binlog-format=MIXED # 2 重啟服務(wù) systemctl restart mysqld # 3 設(shè)置myslave用戶,用于主從復(fù)制 mysql -uroot -p123456 GRANT REPLICATION SLAVE ON *.* TO 'myslave'@'192.168.10.%' IDENTIFIED BY '123456'; flush privileges; # 4 查看master狀態(tài),日志名稱和偏移量 show master status;

slave節(jié)點(diǎn)配置
#1設(shè)置數(shù)據(jù)庫(kù)配置文件 vi /etc/my.cnf #寫入 log_bin=master-bin #開(kāi)啟二進(jìn)制日志文件 server_id = 22 #設(shè)置server_id。slave1為22,slave2 為23 relay-log=relay-log-bin # #從主服務(wù)器上同步日志文件記錄到本地 relay-log-index=slave-relay-bin.index #定義relay-log的位置和名稱(index索引) relay_log_recovery = 1 #保證了relay-log 的完整性 #2重啟mysqld和登入mysql systemctl restart mysqld mysql -uroot -p123456 #3給「從節(jié)點(diǎn)」綁定「主節(jié)點(diǎn)」的同步信息 change master to master_host='192.168.10.105',master_user='myslave',master_password='123456',master_log_file='master-bin.000001',master_log_pos=603; #4開(kāi)啟從節(jié)點(diǎn) start slave; #5、查看從服務(wù)器狀態(tài) show slave status\G;

3)數(shù)據(jù)同步測(cè)試
查看master的數(shù)據(jù)庫(kù),并創(chuàng)建新的數(shù)據(jù)庫(kù)test

查看從節(jié)點(diǎn)是否同步創(chuàng)建數(shù)據(jù)庫(kù)test

1、slave1和slave2的my.cnf的[mysqld]配置:
read_only=1 # 從庫(kù)只讀(MHA 切換主庫(kù)時(shí)會(huì)自動(dòng)臨時(shí)關(guān)閉)
relay_log_purge=1 # 自動(dòng)清理中繼日志(避免磁盤滿)
2、所有節(jié)點(diǎn)注釋[client]里的
default-character-set=utf8 # mysqlbinlog 不識(shí)別該參數(shù)
1.4、在 Master、Slave1、Slave2 節(jié)點(diǎn)上都創(chuàng)建兩個(gè)軟鏈接
ln -s /usr/local/mysql/bin/mysql /usr/sbin/ ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/
1.5、賦權(quán)
# master、slave1、slave2操作 grant replication slave on *.* to 'myslave'@'192.168.10.%' identified by '123456'; # master grant all privileges on *.* to 'mha'@'192.168.10.%' identified by 'manager'; grant all privileges on *.* to 'mha'@'master' identified by 'manager'; grant all privileges on *.* to 'mha'@'slave1' identified by 'manager'; grant all privileges on *.* to 'mha'@'slave2' identified by 'manager'; flush privileges;
2、環(huán)境依賴
2.1、安裝perl相關(guān)依賴(四個(gè)節(jié)點(diǎn))
yum install epel-release --nogpgcheck -y yum install -y perl-DBD-MySQL \ perl-Config-Tiny \ perl-Log-Dispatch \ perl-Parallel-ForkManager \ perl-ExtUtils-CBuilder \ perl-ExtUtils-MakeMaker \ perl-CPAN
2.2、配置ssh免密登入
在所有服務(wù)器上配置互相無(wú)密碼認(rèn)證
(1)在 manager 節(jié)點(diǎn)上配置到所有數(shù)據(jù)庫(kù)節(jié)點(diǎn)的無(wú)密碼認(rèn)證 ssh-keygen -t rsa #一路按回車鍵 ssh-copy-id 192.168.10.105 ssh-copy-id 192.168.10.106 ssh-copy-id 192.168.10.107 (2)在 master 上配置到數(shù)據(jù)庫(kù)節(jié)點(diǎn) slave1 和 slave2 的無(wú)密碼認(rèn)證 ssh-keygen -t rsa #一路按回車鍵 ssh-copy-id 192.168.10.106 ssh-copy-id 192.168.10.107 (3)在 slave1 上配置到數(shù)據(jù)庫(kù)節(jié)點(diǎn) master 和 slave2 的無(wú)密碼認(rèn)證 ssh-keygen -t rsa #一路按回車鍵 ssh-copy-id 192.168.10.105 ssh-copy-id 192.168.10.107 (4)在 slave2 上配置到數(shù)據(jù)庫(kù)節(jié)點(diǎn) master 和 slave1 的無(wú)密碼認(rèn)證 ssh-keygen -t rsa #一路按回車鍵 ssh-copy-id 192.168.10.105 ssh-copy-id 192.168.10.106
使用ssh root@目標(biāo)ip驗(yàn)證是否免密登入。
示例:在manager上,輸入 ssh root@192.168.10.105
驗(yàn)證manager和master的免密登入
3、MHA軟件安裝
3.1、安裝 MHA 管理端和節(jié)點(diǎn)端
node安裝(所有節(jié)點(diǎn))
# 1 所有節(jié)點(diǎn)先安裝node組件,manager 依賴 node 組件。 # 最后在 MHA-manager 節(jié)點(diǎn)上安裝 manager 組件 # manager 上傳解壓node cd /opt tar zxvf mha4mysql-node-0.57.tar.gz cd mha4mysql-node-0.57 perl Makefile.PL #定義了編譯規(guī)則、安裝路徑、依賴關(guān)系等關(guān)鍵信息。 make && make install #### scp 遠(yuǎn)程傳輸壓縮包到服務(wù)器 scp /opt/mha4mysql-node-0.57.tar.gz root@192.168.10.105:/opt/ scp /opt/mha4mysql-node-0.57.tar.gz root@192.168.10.106:/opt/ scp /opt/mha4mysql-node-0.57.tar.gz root@192.168.10.107:/opt/
驗(yàn)證結(jié)果:
ls -l /usr/local/bin/{save_binary_logs,apply_diff_relay_logs,filter_mysqlbinlog,masterha_check_repl}安裝成功node

3.2 在 MHA manager 節(jié)點(diǎn)上安裝 manager 組件
cd /opt tar zxvf mha4mysql-manager-0.57.tar.gz cd mha4mysql-manager-0.57 perl Makefile.PL make&&make install

4、MHA核心配置
4.1、編寫MHA配置文件
# manager 節(jié)點(diǎn)上復(fù)制相關(guān)腳本到/usr/local/bin 目錄
cp -rp /opt/mha4mysql-manager-0.57/samples/scripts /usr/local/bin
# 查看四個(gè)文件
ll /usr/local/bin/scripts/
# (2)復(fù)制上述的自動(dòng)切換時(shí) VIP 管理的腳本到 /usr/local/bin 目錄,這里使用
# master_ip_failover腳本來(lái)管理 VIP 和故障切換
cp /usr/local/bin/scripts/master_ip_failover /usr/local/bin
# 修改內(nèi)容如下:(刪除原有內(nèi)容,直接復(fù)制并修改vip相關(guān)參數(shù))
vim /usr/local/bin/master_ip_failover
#################### 寫入
#!/usr/bin/env perl
use strict;
use warnings FATAL => 'all';
use Getopt::Long;
# 核心配置(根據(jù)集群調(diào)整)
my $vip = '192.168.10.200'; # VIP地址
my $brdc = '192.168.10.255'; # 廣播地址
my $ifdev = 'ens33'; # 綁定網(wǎng)卡
my $key = '1'; # 虛擬網(wǎng)卡序號(hào)
my $ssh_port = '22'; # SSH端口(根據(jù)實(shí)際調(diào)整)
my $exit_code = 0; # 默認(rèn)退出碼
# 改用ip命令(CentOS7原生支持,無(wú)需net-tools),并添加ARP廣播
my $ssh_start_vip = "/usr/sbin/ip addr add $vip/24 brd $brdc dev $ifdev label $ifdev:$key; /usr/sbin/arping -q -A -c 1 -I $ifdev $vip; /usr/sbin/iptables -F;";
my $ssh_stop_vip = "/usr/sbin/ip addr del $vip/24 dev $ifdev label $ifdev:$key;";
# 接收命令行參數(shù)
my (
$command, $ssh_user, $orig_master_host, $orig_master_ip,
$orig_master_port, $new_master_host, $new_master_ip, $new_master_port
);
GetOptions(
'command=s' => \$command,
'ssh_user=s' => \$ssh_user,
'orig_master_host=s' => \$orig_master_host,
'orig_master_ip=s' => \$orig_master_ip,
'orig_master_port=i' => \$orig_master_port,
'new_master_host=s' => \$new_master_host,
'new_master_ip=s' => \$new_master_ip,
'new_master_port=i' => \$new_master_port,
);
exit &main();
# 主邏輯
sub main {
print "\n\nIN SCRIPT TEST====$ssh_stop_vip==$ssh_start_vip===\n\n";
if ( $command eq "stop" || $command eq "stopssh" ) {
$exit_code = 1;
eval {
print "Disabling the VIP on old master: $orig_master_host \n";
&stop_vip();
$exit_code = 0;
};
if ($@) {
warn "Got Error when stop VIP: $@\n";
exit $exit_code;
}
}
elsif ( $command eq "start" ) {
$exit_code = 10;
eval {
print "Enabling the VIP - $vip on the new master - $new_master_host \n";
&start_vip();
$exit_code = 0;
};
if ($@) {
warn "Got Error when start VIP: $@\n";
exit $exit_code;
}
}
elsif ( $command eq "status" ) {
print "Checking the Status of the script.. OK \n";
$exit_code = 0;
}
else {
&usage();
$exit_code = 1;
}
return $exit_code;
}
# 新主庫(kù)綁定VIP
sub start_vip() {
my $ssh_cmd = "ssh -p $ssh_port $ssh_user\@$new_master_host '$ssh_start_vip'";
print "Executing: $ssh_cmd\n";
my $output = `$ssh_cmd 2>&1`;
if ($?) { # 檢查命令執(zhí)行返回碼(非0則失?。?
die "Failed to start VIP on $new_master_host: $output\n";
}
}
# 舊主庫(kù)解綁VIP
sub stop_vip() {
my $ssh_cmd = "ssh -p $ssh_port $ssh_user\@$orig_master_host '$ssh_stop_vip'";
print "Executing: $ssh_cmd\n";
my $output = `$ssh_cmd 2>&1`;
if ($?) {
die "Failed to stop VIP on $orig_master_host: $output\n";
}
}
# 用法說(shuō)明(修復(fù)字符串換行問(wèn)題)
sub usage {
print <<"USAGE";
Usage: master_ip_failover --command=start|stop|stopssh|status \\
--orig_master_host=host --orig_master_ip=ip --orig_master_port=port \\
--new_master_host=host --new_master_ip=ip --new_master_port=port
USAGE
}#(4)創(chuàng)建 MHA 軟件目錄并拷貝配置文件,這里使用app1.cnf配置文件來(lái)管理 mysql 節(jié)點(diǎn)服務(wù)器 mkdir /etc/masterha cp /opt/mha4mysql-manager-0.57/samples/conf/app1.cnf /etc/masterha vim /etc/masterha/app1.cnf #刪除原有內(nèi)容,直接復(fù)制并修改節(jié)點(diǎn)服務(wù)器 ############寫入 [server default] manager_log=/var/log/masterha/app1/manager.log manager_workdir=/var/log/masterha/app1 master_binlog_dir=/usr/local/mysql/data master_ip_failover_script=/usr/local/bin/master_ip_failover master_ip_online_change_script=/usr/local/bin/master_ip_online_change password=manager ping_interval=1 remote_workdir=/tmp repl_password=123456 repl_user=myslave secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.10.106 -s 192.168.10.107 shutdown_script="" ssh_user=root user=mha [server1] hostname=192.168.10.105 port=3306 [server2] candidate_master=1 check_repl_delay=0 hostname=192.168.10.106 port=3306 [server3] hostname=192.168.10.107 port=3306
4.2、驗(yàn)證配置有效性
/sbin/ifconfig ens33:1 192.168.10.200/24
manager 節(jié)點(diǎn)上測(cè)試 ssh
masterha_check_ssh -conf=/etc/masterha/app1.cnf

manager 節(jié)點(diǎn)上測(cè)試 mysql 主從連接
masterha_check_repl -conf=/etc/masterha/app1.cnf

在 manager 節(jié)點(diǎn)上啟動(dòng) MHA
nohup masterha_manager --conf=/etc/masterha/app1.cnf --remove_dead_master_conf –
ignore_last_failover < /dev/null > /var/log/masterha/app1/manager.log 2>&1 &
查看 MHA 狀態(tài)
masterha_check_status --conf=/etc/masterha/app1.cnf

查看 MHA 日志
cat /var/log/masterha/app1/manager.log | grep “current master”
都是master 192.168.10.105
5、啟動(dòng)MHA監(jiān)控
在 manager 節(jié)點(diǎn)上監(jiān)控觀察日志記錄
tail -f /var/log/masterha/app1/manager.log


總結(jié)
本文系統(tǒng)講解 MHA 的組件、原理與作用,通過(guò)環(huán)境準(zhǔn)備、依賴配置、軟件安裝及監(jiān)控部署的完整實(shí)戰(zhàn),為 MySQL 高可用架構(gòu)搭建提供可落地的實(shí)施方案。
到此這篇關(guān)于Mysql的MHA實(shí)戰(zhàn)指南的文章就介紹到這了,更多相關(guān)mysql mha組件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- MySQL MHA 高可用集群搭建過(guò)程詳解
- mysql高可用之MHA用法及說(shuō)明
- Mysql的MHA高可用及故障切換問(wèn)題小結(jié)
- MySQL數(shù)據(jù)庫(kù)實(shí)現(xiàn)高可用架構(gòu)之MHA的實(shí)戰(zhàn)
- MySQL高可用架構(gòu)之MHA架構(gòu)全解
- MySQL之MHA高可用配置及故障切換實(shí)現(xiàn)詳細(xì)部署步驟
- MySQL 搭建MHA架構(gòu)部署的步驟
- MySQL 有關(guān)MHA搭建與切換的幾個(gè)錯(cuò)誤log匯總
- Mysql GTID Mha配置方法
- MySQL下高可用故障轉(zhuǎn)移方案MHA的超級(jí)部署教程
相關(guān)文章
將.sql文件導(dǎo)入到MySQL數(shù)據(jù)庫(kù)具體步驟
MySQL有多種方法導(dǎo)入多個(gè).sql文件,下面這篇文章主要介紹了將.sql文件導(dǎo)入到MySQL數(shù)據(jù)庫(kù)的具體步驟,文中將實(shí)現(xiàn)步驟介紹的非常詳細(xì),需要的朋友可以參考下2023-10-10
php+mysql prepare 與普通查詢的性能對(duì)比實(shí)例講解
prepare可以解決大訪問(wèn)量的網(wǎng)站給數(shù)據(jù)庫(kù)服務(wù)器所帶來(lái)的負(fù)載和開(kāi)銷,本文章通過(guò)實(shí)例向大家介紹預(yù)查詢prepare與普通查詢的性能對(duì)比,需要的朋友可以參考一下2016-11-11
mysql分區(qū)表學(xué)習(xí)之日期分區(qū)
這篇文章主要給大家介紹了關(guān)于mysql分區(qū)表學(xué)習(xí)之日期分區(qū)的相關(guān)資料,分區(qū)是一種表的設(shè)計(jì)模式,通俗地講表分區(qū)是將一大表,根據(jù)條件分割成若干個(gè)小表,需要的朋友可以參考下2023-08-08
MySQL百萬(wàn)級(jí)數(shù)據(jù)分頁(yè)查詢優(yōu)化方案
在mysql中l(wèi)imit可以實(shí)現(xiàn)快速分頁(yè),但是如果數(shù)據(jù)到了幾百萬(wàn)時(shí)我們的limit必須優(yōu)化才能有效的合理的實(shí)現(xiàn)分頁(yè)了,否則可能卡死你的服務(wù)器哦。2017-11-11
mysql數(shù)據(jù)庫(kù)刪除重復(fù)數(shù)據(jù)只保留一條方法實(shí)例
這篇文章主要給大家介紹了關(guān)于mysql數(shù)據(jù)庫(kù)刪除重復(fù)數(shù)據(jù),只保留一條的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03

