主頁 > 後端開發 > (MHA)MySQL高可用集群配置實體,綜合理解決議程序(干貨MHA的下載連接)

(MHA)MySQL高可用集群配置實體,綜合理解決議程序(干貨MHA的下載連接)

2020-10-28 09:32:02 後端開發

MHA高可用MySQL高可用集群

  • 一、MHA的介紹
  • 二、實驗介紹
          • 1、實驗環境
          • 2、實驗目的
          • 3、實驗配置程序
  • 三、實體配置MySQL(MHA)高可用程序
      • 1、配置MySQL一主兩從
          • 1)修改master組態檔
          • 2)修該slave組態檔
          • 3)重啟所有資料庫
          • 4)為資料庫服務器建立軟連接
          • 5)為資料庫服務器開啟主從復制和MHA服務賬戶授權
          • 6)查看master資料庫主從復制的,二進制檔案名和同步復制的pos點
          • 7)在slave資料庫中同步master資料庫
      • 2、安裝 MHA 軟體
          • 1)MHA依賴環境包安裝
          • 2)node節點安裝
          • 3)MHA-manager安裝
      • 4、配置無密碼認證
      • 5、 配置 MySQL MHA 高可用
          • 1)配置MHA自動切換vip腳本
          • 2)配置MHA的組態檔
      • 6、MHA測驗免密互動、和主從同步
          • 1)測驗 ssh 無密碼認證,如果正常最后會輸出 successfully
          • 2)檢查mysql主從復制,如過正常最后回輸出 OK
      • 7、模擬 master 故障切換
          • 1)需要到master資料庫上手動開啟虛擬ip
          • 2)啟動MHA
          • 3)查看當前master狀態
          • 4)將master資料庫關閉
          • 5)查看master地址是否改變
      • 8、修復故障資料庫

一、MHA的介紹

  • MHA是一款用于解決資料庫MySQL高可用性環境下故障切換和主從提升的高可用軟體,能夠很好的解決單master主資料庫單點故障點的問題,

  • 在MySQL故障切換程序中,MHA能做到在0~30秒之內自動完成資料庫的故障切換操作,并且在進行故障切換的程序中, MHA能在最大程度上保證資料的一致性,以達到真正意義上的高可用,

  • MHA能夠在0.5-2秒內實作切換,0.5-2秒的寫阻塞通常是可接受的,所以你甚至能在非維護期間就在線切換master,諸如升級到高版本,升級到更快的服務器之類的作業,將會變得更容易,

  • MHA由Manager節點和Node節點組成,

二、實驗介紹

1、實驗環境
服務器作業系統IP地址
MHA manger節點Linux 7.6 (64位)192.168.10.161/24
master 主節點Linux 7.6 (64位)192.168.10.100/24
mater slave主備節點Linux 7.6 (64位)192.168.10.156/24
slave 從節點Linux 7.6 (64位)192.168.10.160/24
  • 實驗規劃圖
    在這里插入圖片描述
2、實驗目的

本案例要求通過 MHA 監控 MySQL 資料庫在master故障時進行自動切換到master salve,不影響業務,

3、實驗配置程序
  • 配置 MySQL 一主兩從
  • 安裝 MHA 軟體
  • 配置無密碼認證
  • 配置 MySQL MHA 高可用
  • 模擬 master 故障切換

注: 所有服務器關閉selinux和防火墻,

三、實體配置MySQL(MHA)高可用程序

1、配置MySQL一主兩從

  • 為三臺資料庫服務器安裝MySQL7.6
  • 修改資料庫的組態檔/etc/my.cnf,開啟日志服務
1)修改master組態檔
[root@Mysql1 ~]# vim /etc/my.cnf
[mysqld]
server-id = 1                  //資料庫的身份id,不同的資料庫身份id不能一樣
log_bin = master-bin          //開啟資料庫二進制檔案
log-slave-updates = true     //允許別的從服務器和自己同步
2)修該slave組態檔
除了兩臺slave資料庫的server-id直段不一樣,其他修改的添加的欄位一樣
[root@Mysql2 ~]# vim /etc/my.cnf
server-id = 2    
log_bin = master-bin
relay-log = relay-log-bin     //開啟中繼日志,同來同步資料庫的二級制檔案
relay-log-index = slave-relay-bin.index   //開啟中繼日志索引
3)重啟所有資料庫
  [root@Mysql1 ~]# systemctl  restart  mysqld
4)為資料庫服務器建立軟連接
使liunx系統識別mysql的操作命令,
[root@Mysql1 ~]# ln -s /usr/local/mysql/bin/mysql /usr/sbin/
[root@Mysql1 ~]# ln -s /usr/local/mysql/bin/mysqlbinlog /usr/sbin/
5)為資料庫服務器開啟主從復制和MHA服務賬戶授權
mysql> grant replication slave on *.* to 'myslave'@'192.168.10.%' identified by '123';
//為主從復制賬戶授權
mysql> grant all privileges on *.* to 'mha'@'192.168.10.%' identified by 'manager';
//為MHA賬戶授權
mysql> flush privileges;    //重繪授權
6)查看master資料庫主從復制的,二進制檔案名和同步復制的pos點
mysql> show master status;
+-------------------+----------+
| File              | Position |//從服務器要同步的二進制檔案名和同步的pos點
+-------------------+----------+
| master-bin.000001 |    155|     
+-------------------+----------+
7)在slave資料庫中同步master資料庫
mysql> change master to master_host='192.168.10.100',master_user='myslave',
 > master_password='123',master_log_file='master-bin.000001',
 > master_log_pos=155;    //同步主資料庫
mysql> start slave;       //開啟主從復制
mysql> set global read_only=1;   //設定從資料庫為只讀

8)查看slave資料庫的 IO 和 SQL 執行緒是否都是 yes 代表同步是否正常,no 表示不正常,

mysql> show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes   //都為yes表示同步正常

9)驗證主從復制是否成功,
在主服務器上創建一個表或者庫,在從服務器上查看是否有在主服務器上創建的表或者庫

2、安裝 MHA 軟體

1)MHA依賴環境包安裝
  • 每個節點上都要安裝MHA依賴環境包
  • 虛擬機的yum倉庫一定要有線網源,可以上網,因為yum安裝的環境包都時需要到線網中下載,
[root@MHA-manager ~]# yum install epel-release --nogpgcheck -y   //以不檢查簽名資訊的方式安裝epel源
[root@MHA-manager ~]#yum install -y perl-DBD-MySQL \            //連接資料庫的驅動
perl-Config-Tiny \            //配置資訊    
perl-Log-Dispatch \             //日志資訊
perl-Parallel-ForkManager \       //多執行緒管理
perl-ExtUtils-CBuilder \            //單元構建
perl-ExtUtils-MakeMaker \         //編譯行程
perl-CPAN                              //包管理行程
2)node節點安裝

MHA 軟體包對于每個作業系統版本不一樣,這里 CentOS7.0以上必須選擇 0.57 版本,CentOs6.0以上使用必須使用0.56版本,需要注意的是所有服務器上必須先安裝 node 組件,最后在 MHA-manager 節點上安裝 manager 組件,因為 manager 管理服務器依賴 node 組件,

  • node的下載網址https://nodejs.org/en/download/

將下載的node包上傳到各個節點,

  • 編譯安裝node組件
[root@Mysql1 ~]# tar zxvf mha4mysql-node-0.57.tar.gz     //解壓node安裝包
[root@Mysql1 ~]# cd mha4mysql-node-0.57    //進入到解壓目錄
[root@Mysql1 mha4mysql-node-0.57]# perl Makefile.PL   //使用perl 編譯檔案
[root@Mysql1 mha4mysql-node-0.57]# make   &&  make install   //編譯安裝node

注: node 安裝后也會在/usr/local/bin 下面會生成幾個腳本(這些工具通常由 MHAManager 的腳本觸發,無需人為操作)主要包括:

腳本名用法介紹
save_binary_logs保存和復制 master 的二進制日志
-apply_diff_relay_logs識別差異的中繼日志事件并將其差異的事件應用于其他的 slave
filter_mysqlbinlog去除不必要的 ROLLBACK 事件(MHA 已不再使用這個工具)
-purge_relay_logs清除中繼日志(不會阻塞 SQL 執行緒)
3)MHA-manager安裝

在 MHA-manager 上安裝 manager 組件(!注意:一定要先安裝node 組件才能安裝manager 組件)

  • MHA-manager 5.6的下載地址
    https://github.com/yoshinorim/mha4mysql-manager/wiki/Downloads
  • MHA-manager 5.7的下載地址需要翻墻才能下載到,這里是以下好的提取地址
    鏈接: https://pan.baidu.com/s/18H12bTIYHi2H0dXs2DI7NA 提取碼: mwkq
[root@MHA-manager ~]# tar zxvf mha4MHA-manager-0.57.tar.gz 
[root@MHA-manager ~]# cd mha4MHA-manager-0.57
[root@MHA-manager mha4MHA-manager-0.57]# perl Makefile.PL
[root@MHA-manager mha4MHA-manager-0.57]# make  &&  make install

注: manager 安裝后在/usr/local/bin 下面會生成幾個用法工具,主要包括:

工具名用法介紹
masterha_check_ssh檢查 MHA 的 SSH 配置狀況
masterha_check_repl檢查 MySQL 復制狀況
masterha_manger啟動 manager的腳本
masterha_check_status檢測當前 MHA 運行狀態
masterha_master_monitor檢測 master 是否宕機
masterha_master_switch控制故障轉移(自動或者手動)
masterha_conf_host添加或洗掉配置的 server 資訊
masterha_stop關閉manager

4、配置無密碼認證

1) 在 manager 上配置到所有資料庫節點的無密碼認證
[root@MHA-manager ~]# ssh-keygen -t rsa //一路按回車鍵
[root@MHA-manager ~]# ssh-copy-id 192.168.10.100
[root@MHA-manager ~]# ssh-copy-id 192.168.10.156
[root@MHA-manager ~]# ssh-copy-id 192.168.10.160
2)在master上配置到資料庫節點slave的無密碼認證
[root@Mysql1 ~]# ssh-keygen -t rsa
[root@Mysql1 ~]# ssh-copy-id 192.168.10.156
[root@Mysql1 ~]# ssh-copy-id 192.168.10.160
3)在 master-slave 上配置到資料庫節點slave和master的無密碼認證
[root@Mysql2 ~]# ssh-keygen -t rsa
[root@Mysql2 ~]# ssh-copy-id 192.168.10.100
[root@Mysql2 ~]# ssh-copy-id 192.168.10.160
4) 在slave 上配置到資料庫節點master-slave和master的無密碼認證
[root@Mysql3 ~]# ssh-keygen -t rsa
[root@Mysql3 ~]# ssh-copy-id 192.168.10.100
[root@Mysql3 ~]# ssh-copy-id 192.168.10.156

5、 配置 MySQL MHA 高可用

1)配置MHA自動切換vip腳本

[root@MHA-manager ~]# cp -ra /root/mha4mysql-manager-0.57/samples/scripts /usr/local/bin
//將vip控制腳本復制到指定目錄下

  • 控制自動切換vip的腳本模板
腳本名用法介紹
master_ip_failover自動切換時 vip 管理的腳本
master_ip_online_change在線切換時 vip 的管理
power_manager故障發生后關閉主機的腳本
1360 5 月 31 2015 send_report因故障切換后發送報警的腳本
  • 復制上述的自動切換時 vip 管理的腳本到/usr/local/bin 目錄,使用腳本管理 vip
    [root@MHA-manager ~]# cp /usr/local/bin/scripts/master_ip_failover /usr/local/bin
  • 添加內容部分
[root@localhost local]# vim /usr/local/bin/master_ip_failover
#!/usr/bin/env perl
use strict;
use warnings FATAL => 'all';

use Getopt::Long;

my (
$command, $ssh_user, $orig_master_host, $orig_master_ip,
$orig_master_port, $new_master_host, $new_master_ip, $new_master_port
);
//添加以下內容
my $vip = '192.168.10.200';         //vip的地址
my $brdc = '192.168.10.255';    //vip的網路號,也表示結束地址
my $ifdev = 'ens33';      //網卡名稱
my $key = '1';            //邏輯子介面
my $ssh_start_vip = "/sbin/ifconfig ens33:$key $vip";    //啟動vip
my $ssh_stop_vip = "/sbin/ifconfig ens33:$key down";   //關閉vip
my $exit_code = 0;    //狀態的回傳值,正常關倍訓傳0
······   //省略部分資訊
2)配置MHA的組態檔

創建 MHA 軟體目錄并拷貝組態檔,

[root@MHA-manager ~]# mkdir /etc/masterha           #創建軟體目錄
[root@MHA-manager ~]# cp /root/mha4mysql-manager-0.57/samples/conf/app1.cnf /etc/masterha/     #復制模板到軟體目錄
[root@MHA-manager ~]# vim /etc/masterha/app1.cnf        #編輯組態檔
[server default]
manager_workdir=/var/log/masterha/app1.log               ##manager作業目錄
manager_log=/var/log/masterha/app1/manager.log            #manager日志
master_binlog_dir=/usr/local/mysql/data/                #master保存binlog的位置,這里的路徑要與master里配置的binlog的路徑一致,以便mha能找到
#master_ip_failover_script= /usr/local/bin/master_ip_failover    #設定自動failover時候的切換腳本,也就是上邊編輯的自動切換vip腳本
master_ip_online_change_script= /usr/local/bin/master_ip_online_change  #設定手動切換時候的切換腳本
password=manager      #設定mysql中root用戶的密碼,這個密碼是前文中創建監控用戶的那個密碼
user=mha        #設定監控用戶root
ping_interval=1      #設定監控主庫,發送ping包的時間間隔,默認是3秒,嘗試三次沒有回應的時候自動進行railover
remote_workdir=/tmp    #設定遠端mysql在發生切換時binlog的保存位置
repl_password=123        #設定復制用戶的密碼
repl_user=myslave           #設定復制用戶的用戶
report_script=/usr/local/send_report      //設定發生切換后發送的報警的腳本
secondary_check_script=/usr/local/bin/masterha_secondary_check -s 192.168.10.100  -s 192.168.10.156
shutdown_script=""  #設定故障發生后關閉故障主機腳本(該腳本的主要作用是關閉主機,這里沒有使用)
ssh_user=root      #設定ssh的登錄用戶名

[server1]
hostname=192.168.10.100
port=3306
[server2]
hostname=192.168.10.156
port=3306
candidate_master=1    #設定為候選master,如果設定該引數以后,發生主從切換以后將會將此從庫提升為主庫,即使這個主庫不是集群中事件最新的slave
check_repl_delay=0    #默認情況下如果一個slave落后master 100M的relay logs的話,MHA將不會選擇該slave作為一個新的master,因為對于這個slave的恢復需要花費很長時間,通過設定check_repl_delay=0,MHA觸發切換在選擇一個新的master的時候將會忽略復制延時,這個引數對于設定了candidate_master=1的主機非常有用,因為這個候選主在切換的程序中一定是新的master

[server3]
hostname=192.168.10.161
port=3306

6、MHA測驗免密互動、和主從同步

1)測驗 ssh 無密碼認證,如果正常最后會輸出 successfully
[root@localhost local]# masterha_check_ssh -conf=/etc/masterha/app1.cnf
Sun Oct 25 13:59:20 2020 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
Sun Oct 25 13:59:20 2020 - [info] Reading application default configuration from /etc/masterha/app1.cnf..
······//省略部分資訊
Sun Oct 25 13:59:26 2020 - [info] All SSH connection tests passed successfully.
2)檢查mysql主從復制,如過正常最后回輸出 OK
[root@localhost ]# masterha_check_repl -conf=/etc/masterha/app1.cnf
Sun Oct 25 15:16:47 2020 - [warning] Global configuration file /etc/masterha_default.cnf not found. Skipping.
Sun Oct 25 15:16:47 2020 - [info] Reading application default configuration from /etc/masterha/app1.cnf..
·······//省略部分資訊
MySQL Replication Health is OK.

7、模擬 master 故障切換

1)需要到master資料庫上手動開啟虛擬ip

[root@Mysql1 ~]# /sbin/ifconfig ens33:1 192.168.10.200/24

2)啟動MHA
[root@MHA-manager ~]# 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 &

--remove_dead_master_conf 該引數代表當發生主從切換后,老的主庫的 ip 將會從組態檔中移除,

--ignore_last_failover 在預設情況下,如果 MHA 檢測到連續發生宕機,且兩次宕機間隔不足 8 小時的話,則不會進行 Failover,之所以這樣限制是為了避免 ping-pong 效應,該引數代表忽略上次 MHA 觸發切換產生的檔案,
默認情況下,MHA 發生切換后會在日志記目錄,也就是上面設定的日志 app1.failover.complete 檔案,下次再次切換的時候如果發現該目錄下存在該檔案將不允許觸發切換,除非在第一次切換后收到洗掉該檔案,
為了方便,這里設定--ignore_last_failover,

-- manger_log 日志存放位置,
3)查看當前master狀態

[root@mysql3 local]# masterha_check_status --conf=/etc/masterha/app1.cnf
app1 (pid:22244) is running(0:PING_OK), master:192.168.10.100

4)將master資料庫關閉
  • 在master資料庫上查看vip是否啟動
[root@mysql1 ~]# ifconfig        //查看vip是否開啟
ens33: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.100  netmask 255.255.255.0  broadcast 192.168.10.255
        inet6 fe80::e6f1:c815:f9f7:fa2d  prefixlen 64  scopeid 0x20<link>
        ether 00:0c:29:5a:1e:11  txqueuelen 1000  (Ethernet)
        RX packets 605653  bytes 890376090 (849.1 MiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 108259  bytes 7264193 (6.9 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

ens33:1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.10.200  netmask 255.255.255.0  broadcast 192.168.10.255
        ether 00:0c:29:5a:1e:11  txqueuelen 1000  (Ethernet)


[root@mysql1 ~]# systemctl stop mysqld   或 pkill -9 mysql  //關閉資料庫
5)查看master地址是否改變

[root@mysql3 local]# masterha_check_status --conf=/etc/masterha/app1.cnf

app1 (pid:23153) is running(0:PING_OK), master:192.168.10.156

//模擬故障成功master地址由100變為了156

切換備選主庫的演算法:
1.一般判斷從庫的是從(position/GTID)判斷優劣,資料有差異,最接近于master的slave,成為備選主,
2.資料一致的情況下,按照組態檔順序,選擇備選主庫,
3.設定有權重(candidate_master=1),按照權重強制指定備選主,
1)默認情況下如果一個slave落后master 100M的relay logs的話,即使有權重,也會失效,
2)如果check_repl_delay=0的話,即使落后很多日志,也強制選擇其為備選主,

8、修復故障資料庫

1)啟動故障資料庫
[root@mysql1 ~]# systemctl start mysqld
2)修復故障資料庫主從同步
mysql> change master to master_host=‘192.168.10.156’,master_user=‘myslave’,
> master_password=‘123’,master_log_file=‘master-bin.000004’,
> master_log_pos=154;
>start slave;
3)修改MHA服務器組態檔(再把這個記錄添加進去,因為它檢測掉失效時候會自動消失)
[root@localhost ]# vi /etc/masterha/app1.cnf
[server1]
hostname=192.168.195.129
port=3306
4)重啟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 &

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/194954.html

標籤:python

上一篇:2020年最新阿里、位元組、騰訊、京東等一線大廠高頻面試(Java崗)真題合集,面試輕松無壓力

下一篇:面試不再慌!苦學這份2020最全的Java性能優化實戰筆記,已漲17k

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • 【C++】Microsoft C++、C 和匯編程式檔案

    ......

    uj5u.com 2020-09-10 00:57:23 more
  • 例外宣告

    相比于斷言適用于排除邏輯上不可能存在的狀態,例外通常是用于邏輯上可能發生的錯誤。 例外宣告 Item 1:當函式不可能拋出例外或不能接受拋出例外時,使用noexcept 理由 如果不打算拋出例外的話,程式就會認為無法處理這種錯誤,并且應當盡早終止,如此可以有效地阻止例外的傳播與擴散。 示例 //不可 ......

    uj5u.com 2020-09-10 00:57:27 more
  • Codeforces 1400E Clear the Multiset(貪心 + 分治)

    鏈接:https://codeforces.com/problemset/problem/1400/E 來源:Codeforces 思路:給你一個陣列,現在你可以進行兩種操作,操作1:將一段沒有 0 的區間進行減一的操作,操作2:將 i 位置上的元素歸零。最終問:將這個陣列的全部元素歸零后操作的最少 ......

    uj5u.com 2020-09-10 00:57:30 more
  • UVA11610 【Reverse Prime】

    本人看到此題沒有翻譯,就附帶了一個自己的翻譯版本 思考 這一題,它的第一個要求是找出所有 $7$ 位反向質數及其質因數的個數。 我們應該需要質數篩篩選1~$10^{7}$的所有數,這里就不慢慢介紹了。但是,重讀題,我們突然發現反向質數都是 $7$ 位,而將它反過來后的數字卻是 $6$ 位數,這就說明 ......

    uj5u.com 2020-09-10 00:57:36 more
  • 統計區間素數數量

    1 #pragma GCC optimize(2) 2 #include <bits/stdc++.h> 3 using namespace std; 4 bool isprime[1000000010]; 5 vector<int> prime; 6 inline int getlist(int ......

    uj5u.com 2020-09-10 00:57:47 more
  • C/C++編程筆記:C++中的 const 變數詳解,教你正確認識const用法

    1、C中的const 1、區域const變數存放在堆疊區中,會分配記憶體(也就是說可以通過地址間接修改變數的值)。測驗代碼如下: 運行結果: 2、全域const變數存放在只讀資料段(不能通過地址修改,會發生寫入錯誤), 默認為外部聯編,可以給其他源檔案使用(需要用extern關鍵字修飾) 運行結果: ......

    uj5u.com 2020-09-10 00:58:04 more
  • 【C++犯錯記錄】VS2019 MFC添加資源不懂如何修改資源宏ID

    1. 首先在資源視圖中,添加資源 2. 點擊新添加的資源,復制自動生成的ID 3. 在解決方案資源管理器中找到Resource.h檔案,編輯,使用整個專案搜索和替換的方式快速替換 宏宣告 4. Ctrl+Shift+F 全域搜索,點擊查找全部,然后逐個替換 5. 為什么使用搜索替換而不使用屬性視窗直 ......

    uj5u.com 2020-09-10 00:59:11 more
  • 【C++犯錯記錄】VS2019 MFC不懂的批量添加資源

    1. 打開資源頭檔案Resource.h,在其中預先定義好宏 ID(不清楚其實ID值應該設定多少,可以先新建一個相同的資源項,再在這個資源的ID值的基礎上遞增即可) 2. 在資源視圖中選中專案資源,按F7編輯資源檔案,按 ID 型別 相對路徑的形式添加 資源。(別忘了先把檔案拷貝到專案中的res檔案 ......

    uj5u.com 2020-09-10 01:00:19 more
  • C/C++編程筆記:關于C++的參考型別,專供新手入門使用

    今天要講的是C++中我最喜歡的一個用法——參考,也叫別名。 參考就是給一個變數名取一個變數名,方便我們間接地使用這個變數。我們可以給一個變數創建N個參考,這N + 1個變數共享了同一塊記憶體區域。(參考型別的變數會占用記憶體空間,占用的記憶體空間的大小和指標型別的大小是相同的。雖然參考是一個物件的別名,但 ......

    uj5u.com 2020-09-10 01:00:22 more
  • 【C/C++編程筆記】從頭開始學習C ++:初學者完整指南

    眾所周知,C ++的學習曲線陡峭,但是花時間學習這種語言將為您的職業帶來奇跡,并使您與其他開發人員區分開。您會更輕松地學習新語言,形成真正的解決問題的技能,并在編程的基礎上打下堅實的基礎。 C ++將幫助您養成良好的編程習慣(即清晰一致的編碼風格,在撰寫代碼時注釋代碼,并限制類內部的可見性),并且由 ......

    uj5u.com 2020-09-10 01:00:41 more
最新发布
  • Rust中的智能指標:Box<T> Rc<T> Arc<T> Cell<T> RefCell<T> Weak

    Rust中的智能指標是什么 智能指標(smart pointers)是一類資料結構,是擁有資料所有權和額外功能的指標。是指標的進一步發展 指標(pointer)是一個包含記憶體地址的變數的通用概念。這個地址參考,或 ” 指向”(points at)一些其 他資料 。參考以 & 符號為標志并借用了他們所 ......

    uj5u.com 2023-04-20 07:24:10 more
  • Java的值傳遞和參考傳遞

    值傳遞不會改變本身,參考傳遞(如果傳遞的值需要實體化到堆里)如果發生修改了會改變本身。 1.基本資料型別都是值傳遞 package com.example.basic; public class Test { public static void main(String[] args) { int ......

    uj5u.com 2023-04-20 07:24:04 more
  • [2]SpinalHDL教程——Scala簡單入門

    第一個 Scala 程式 shell里面輸入 $ scala scala> 1 + 1 res0: Int = 2 scala> println("Hello World!") Hello World! 檔案形式 object HelloWorld { /* 這是我的第一個 Scala 程式 * 以 ......

    uj5u.com 2023-04-20 07:23:58 more
  • 理解函式指標和回呼函式

    理解 函式指標 指向函式的指標。比如: 理解函式指標的偽代碼 void (*p)(int type, char *data); // 定義一個函式指標p void func(int type, char *data); // 宣告一個函式func p = func; // 將指標p指向函式func ......

    uj5u.com 2023-04-20 07:23:52 more
  • Django筆記二十五之資料庫函式之日期函式

    本文首發于公眾號:Hunter后端 原文鏈接:Django筆記二十五之資料庫函式之日期函式 日期函式主要介紹兩個大類,Extract() 和 Trunc() Extract() 函式作用是提取日期,比如我們可以提取一個日期欄位的年份,月份,日等資料 Trunc() 的作用則是截取,比如 2022-0 ......

    uj5u.com 2023-04-20 07:23:45 more
  • 一天吃透JVM面試八股文

    什么是JVM? JVM,全稱Java Virtual Machine(Java虛擬機),是通過在實際的計算機上仿真模擬各種計算機功能來實作的。由一套位元組碼指令集、一組暫存器、一個堆疊、一個垃圾回收堆和一個存盤方法域等組成。JVM屏蔽了與作業系統平臺相關的資訊,使得Java程式只需要生成在Java虛擬機 ......

    uj5u.com 2023-04-20 07:23:31 more
  • 使用Java接入小程式訂閱訊息!

    更新完微信服務號的模板訊息之后,我又趕緊把微信小程式的訂閱訊息給實作了!之前我一直以為微信小程式也是要企業才能申請,沒想到小程式個人就能申請。 訊息推送平臺🔥推送下發【郵件】【短信】【微信服務號】【微信小程式】【企業微信】【釘釘】等訊息型別。 https://gitee.com/zhongfuch ......

    uj5u.com 2023-04-20 07:22:59 more
  • java -- 緩沖流、轉換流、序列化流

    緩沖流 緩沖流, 也叫高效流, 按照資料型別分類: 位元組緩沖流:BufferedInputStream,BufferedOutputStream 字符緩沖流:BufferedReader,BufferedWriter 緩沖流的基本原理,是在創建流物件時,會創建一個內置的默認大小的緩沖區陣列,通過緩沖 ......

    uj5u.com 2023-04-20 07:22:49 more
  • Java-SpringBoot-Range請求頭設定實作視頻分段傳輸

    老實說,人太懶了,現在基本都不喜歡寫筆記了,但是網上有關Range請求頭的文章都太水了 下面是抄的一段StackOverflow的代碼...自己大修改過的,寫的注釋挺全的,應該直接看得懂,就不解釋了 寫的不好...只是希望能給視頻網站開發的新手一點點幫助吧. 業務場景:視頻分段傳輸、視頻多段傳輸(理 ......

    uj5u.com 2023-04-20 07:22:42 more
  • Windows 10開發教程_編程入門自學教程_菜鳥教程-免費教程分享

    教程簡介 Windows 10開發入門教程 - 從簡單的步驟了解Windows 10開發,從基本到高級概念,包括簡介,UWP,第一個應用程式,商店,XAML控制元件,資料系結,XAML性能,自適應設計,自適應UI,自適應代碼,檔案管理,SQLite資料庫,應用程式到應用程式通信,應用程式本地化,應用程式 ......

    uj5u.com 2023-04-20 07:22:35 more