Centos 6.9 安装xtrabackup-2.4.8 通用包,yum安装,全量备份,增量备份

2023-11-20 12:32

本文主要是介绍Centos 6.9 安装xtrabackup-2.4.8 通用包,yum安装,全量备份,增量备份,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

xtrabackup-2.4.8的安装及使用

Xtrabackup是由percona提供的mysql数据库备份工具,据官方介绍,这也是世界上惟一一款开源的能够对innodb和xtradb数据库进行热备的工具。特点:

  • (1)备份过程快速、物理备份可靠;
  • (2)备份过程不会打断正在执行的事务(无需锁表);
  • (3)能够基于压缩等功能节约磁盘空间和流量;
  • (4)自动实现备份检验;
  • (5)还原速度快;
  • (6)可以流传将备份传输到另外一台机器上;

xtrabackup包含两个主要的工具,即xtrabackup和innobackupex,二者区别如下:

Xtrabackup:只能备份innodb和xtradb两种引擎的表,而不能备份myisam引擎的表;

Innobackup:是一个封装了xtrabackup的Perl脚本,支持同时备份innodb和myisam,但在对myisam备份时需要加一个全局的读锁。还有就是myisam不支持增量备份

1、---Yum安装

官网地址:https://www.percona.com/doc/percona-xtrabackup/LATEST/installation/yum_repo.html

其最新版的软件可从 http://www.percona.com/software/percona-xtrabackup/ 

[root@001 ~]# yum install http://www.percona.com/downloads/percona-release/redhat/0.1-4/percona-release-0.1-4.noarch.rpm

[root@001 ~]# yum list | grep percona

[root@001 ~]# yum install percona-xtrabackup-24 -y

# 卸载命令:yum remove percona-xtrabackup 

2、---使用二进制编译好的通用安装包

下载地址:https://www.percona.com/downloads/XtraBackup/LATEST/binary/redhat/6/x86_64/ #自行选择版本

下载地址:https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.8/binary/tarball/percona-xtrabackup-2.4.8-Linux-x86_64.tar.gz #本次使用版本

[root@001 ~]# wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.4.8/binary/tarball/percona-xtrabackup-2.4.8-Linux-x86_64.tar.gz

[root@001 ~]# tar xf percona-xtrabackup-2.4.8-Linux-x86_64.tar.gz -C /usr/local/

[root@001 ~]# mv /usr/local/percona-xtrabackup-2.4.8-Linux-x86_64/ /usr/local/xtrabackup

[root@001 local]# echo "export PATH=$PATH:/usr/local/xtrabackup/bin" >> /etc/profile

[root@001 local]# source /etc/profile

[root@001 ~]# yum install numactl -y #安装依赖

3、----全量备份

备份数据存放在/data/backup/下面,innobackupex会自动创建一个文件夹+当前系统的时间戳

创建测试数据库,表

mysql> create database test;

mysql> use test;

mysql> create table t1;

mysql> create table t1(id int auto_increment primary key);

mysql> insert into t1 values(null);

mysql> insert into t1 values(null);

mysql> insert into t1 values(null);

[root@001 ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --socket=/data/mysqldata/mysqld.sock /data/backup/full

#这里测试直接使用root权限附上创建用户及权限命令

mysql> create user 'backup'@'localhost' identified by '123456';

mysql> grant reload,lock tables,replication client,show view,event,process on *.* to 'backup'@localhost;

mysql> plush privileges;

#使用innobakupex备份时,其会调用xtrabackup备份所有的InnoDB表,复制所有关于表结构定义的相关文件(.frm)、以及MyISAM、MERGE、CSV和ARCHIVE表的相关文件,同时还会备份触发器和数据库配置信息相关的文件。这些文件会被保存至一个以时间命名的目录中。

各文件说明:

(1) backup-my.cnf —— 备份命令用到的配置选项信息;

    在使用innobackupex进行备份时,还可以使用--no-timestamp选项来阻止命令自动创建一个以时间命名的目录;如此一来,innobackupex命令将会创建一个BACKUP-DIR目录来存储备份数据。

(2) ibdata1 —— 备份的表空间文件;

(3) xtrabackup_binary —— 备份中用到的xtrabackup的可执行文件;

(4) xtrabackup_binlog_info —— mysql服务器当前正在使用的二进制日志文件及至备份这一刻为止二进制日志事件的位置;

(5) xtrabackup_checkpoints —— 备份类型(如完全或增量)、备份状态(如是否已经为prepared状态)和LSN(日志序列号)范围信息;

每个InnoDB页(通常为16k大小)都会包含一个日志序列号,即LSN。LSN是整个数据库系统的系统版本号,每个页面相关的LSN能够表明此页面最近是如何发生改变的。

6) xtrabackup_logfile —— 备份的重做日志文件。

7)xtrabackup_binlog_pos_innodb —— 二进制日志文件及用于InnoDB或XtraDB表的二进制日志文件的当前position。

可以看见相关文件记录了LSN,日志偏移量,还可以看见这次是全备份

删除数据库,然后恢复全备(线上不要这样搞

mysql> drop database test; 

5、---恢复全备

重要:****恢复备份到mysql的数据文件目录,这一过程要先关闭mysql数据库,重命名或者删除原数据文件目录都可以,再创建一个新的数据文件目录,将备份数据复制到新的数据文件目录下,赋权,修改权限,启动数据库

[root@001 ~]# service mysqld stop

[root@001 ~]# mv /data/mysqldata/ /tmp/mysqldata/

[root@001 ~]# mkdir /data/mysqldata

[root@001 ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --use-memory=4G --apply-log /data/2017-08-05_11-44-06/ #第1步是apply-log,为了加快速度,一般建议设置--use-memory,这个步骤完成之后,目录就准备就绪


一般情况下,在备份完成后,数据尚且不能用于恢复操作,因为备份的数据中可能会包含尚未提交的事务或已经提交但尚未同步至数据文件中的事务。因此,此时数据文件仍处理不一致状态。“准备”的主要作用正是通过回滚未提交的事务及同步已经提交的事务至数据文件也使得数据文件处于一致性状态。

innobakupex命令的--apply-log选项可用于实现上述功能。如下面的命令:

# innobackupex --apply-log  /path/to/BACKUP-DIR

如果执行正确,其最后输出的几行信息通常如下:


xtrabackup: starting shutdown with innodb_fast_shutdown = 1
120407  9:01:36  InnoDB: Starting shutdown...
120407  9:01:40  InnoDB: Shutdown completed; log sequence number 92036620
120407 09:01:40  innobackupex: completed OK!


在实现“准备”的过程中,innobackupex通常还可以使用--use-memory选项来指定其可以使用的内存的大小,默认通常为100M。如果有足够的内存可用,可以多划分一些内存给prepare的过程,以提高其完成速度。


[root@001 ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --copy-back /data/2017-08-05_11-33-06/ #第2步是copy-back,即把备份文件拷贝至原数据目录下。注意:innobackupex 增量备份仅针对InnoDB这类支持事务的引擎,对于MyISAM等引擎,则仍然是全备

170805 16:49:32 completed OK! #成功


可以看见已经成功恢复,修改数据目录权限,启动mysql,效验数据是否正常,查看yayun库下面的t1表中的数据。

[root@001 ~]# chown -R mysql:mysql /data/

[root@001 ~]# service mysqld start 

数据已经成功恢复


6、使用innobackupex进行增量备份

每个InnoDB的页面都会包含一个LSN信息,每当相关的数据发生改变,相关的页面的LSN就会自动增长。这正是InnoDB表可以进行增量备份的基础,即innobackupex通过备份上次完全备份之后发生改变的页面来实现。

在进行增量备份时,首先要进行一次全量备份,第一次增量备份是基于全备的,之后的增量备份是基于上一次的增量备份,以此类推。

全备份放在/data/backup/full,增量备份放在/data/backup/incremental

先来全量备份

[root@001 ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --socket=/data/mysqldata/mysqld.sock /data/backup/full

为了测试效果,我们在t1表中插入数据

mysql> insert into t1 values(null);


注意:BASEDIR指的是完全备份所在的目录,此命令执行结束后,innobackupex命令会在备份目录中创建一个新的以时间命名的目录以存放所有的增量备份数据。另外,在执行过增量备份之后再一次进行增量备份时,其--incremental-basedir应该指向上一次的增量备份所在的目录。


需要注意的是,增量备份仅能应用于InnoDB或XtraDB表,对于MyISAM表而言,执行增量备份时其实进行的是完全备份。

1)要实现第一次增量备份

[root@001 ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --socket=/data/mysqldata/mysqld.sock --incremental /data/backup/incremental/ --incremental-basedir=/data/backup/full/2017-08-05_11-59-39/ --parallel=2 

我们看看增量备份的大小以及文件内容

在test种创建t2,并插入数据然后创建增量备份2

mysql> use test;

mysql> create table t2(name varchar(20));

mysql> insert into t2 values('will');

mysql> insert into t2 values('tom');

mysql> insert into t2 values('jim');

2)创建增量备份2(这次是基于上次的增量备份)

[root@001 ~]# innobackupex --defaults-file=/etc/my.cnf --user=root --password=123456 --socket=/data/mysqldata/mysqld.sock --incremental /data/backup/incremental/ --incremental-basedir=/data/backup/incremental/ 2017-08-05_12-13-27/ --parallel=2 

注意:***增量备份恢复

增量备份的恢复大体为3个步骤

*恢复完全备份

*恢复增量备份到完全备份(开始恢复的增量备份要添加--redo-only参数,到最后一次增量备份去掉--redo-only参数)

*对整体的完全备份进行恢复,回滚那些未提交的数据

恢复完全备份(注意这里一定要加--redo-only参数,该参数的意思是只应用xtrabackup日志中已提交的事务数据,不回滚还未提交的数据)

root@001 ~]# innobackupex --apply-log --redo-only /data/backup/full/2017-08-05_11-59-39

将增量备份1应用到完全备份

[root@001 ~]# innobackupex --apply-log --redo-only /data/backup/full/2017-08-05_11-59-39 --incremental-dir=/data/backup/incremental/2017-08-05_12-04-59

将增量备份2应用到完全备份(注意恢复最后一个增量备份时需要去掉--redo-only参数,回滚xtrabackup日志中那些还未提交的数据)

[root@001 ~]# innobackupex --apply-log --redo-only /data/backup/full/2017-08-05_11-59-39 --incremental-dir=/data/backup/incremental/2017-08-05_12-13-27

把所有合在一起的完全备份整体进行一次apply操作,回滚未提交的数据:

[root@001 ~]# innobackupex --apply-log /data/backup/full/2014-04-07_23-37-20/

把恢复完的备份复制到数据库目录文件中,赋权,然后启动mysql数据库,检测数据正确性

[root@001 ~]# service mysqld start

[root@001 ~]# mv /data/mysqldata/ /tmp/mysqldata/

[root@001 ~]# mkdir /data/mysqldata

[root@001 ~]# innobackupex --defaults-file=/etc/my.cnf --copy-back --rsync /data/backup/full/2017-08-05_11-59-39/

[root@001 ~]# chown -R mysql.mysql /data/ 



“准备”(prepare)增量备份与整理完全备份有着一些不同,尤其要注意的是:
(1)需要在每个备份(包括完全和各个增量备份)上,将已经提交的事务进行“重放”。“重放”之后,所有的备份数据将合并到完全备份上。

(2)基于所有的备份将未提交的事务进行“回滚”。

于是,操作就变成了:
# innobackupex --apply-log --redo-only BASE-DIR


接着执行:
# innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-1


而后是第二个增量:

# innobackupex --apply-log --redo-only BASE-DIR --incremental-dir=INCREMENTAL-DIR-2


其中BASE-DIR指的是完全备份所在的目录,而INCREMENTAL-DIR-1指的是第一次增量备份的目录,INCREMENTAL-DIR-2指的是第二次增量备份的目录,其它依次类推,即如果有多次增量备份,每一次都要执行如上操作;


8、克隆slave

在日常工作中,我们有时候需要在线添加从库,比如线上有一主一从两个数据库,但是由于业务的需要,一台从库的读取无法满足现在的需求,这样就需要我们在线添加从库,由于出于安全考虑,我们通常需要在从库上进行在线克隆slave。

克隆slave时,常用参数--slave-info和--safe-slave-backup。

--slave-info会将master的binlog文件名和偏移量位置保存到xtrabackup_slave_info文件中

--safe-slave-backup会暂停slave的SQL线程直到没有打开的临时表的时候开始备份。备份结束后SQL线程会自动启动,这样操作的目的主要是确保一致性的复制状态。

下面的例子,将介绍一主一从情况下在线搭建新的从库,环境如下:

master 192.168.0.10 #主库

slave 192.168.0.20 #从库

newslave 192.168.0.100 # 新的从库

在上述示例中,newslave即为要新搭建的从库。在老的从库上面进行备份:

[root@MySQL-02 ~]# innobackupex --user=root --password=12345 --socket=/tmp/mysqld.sock --defaults-file=/etc/my.cnf --slave-info --safe-slave-backup --no-timestamp /data/cloneslave

innobackupex: Backup created in directory '/data/cloneslave'

innobackupex: MySQL binlog position: filename 'mysql-bin.000022', position 107

innobackupex: MySQL slave binlog position: master host '192.168.0.10', filename 'mysql-bin.000006', position 732

140413 23:25:13 innobackupex: completed OK!

这里的/data/cloneslave 目录要不存在,如果存在是会报错的。

查看目录下生成的文件:

[root@MySQL-02 ~]# ll /data/cloneslave/

total 26668

-rw-r--r-- 1 root root 261 Apr 13 23:24 backup-my.cnf

-rw-r--r-- 1 root root 27262976 Apr 13 23:24 ibdata1

drwxr-xr-x 2 root root 4096 Apr 13 23:25 mysql

drwxr-xr-x 2 root root 4096 Apr 13 23:25 performance_schema

drwxr-xr-x 2 root root 4096 Apr 13 23:25 sakila

drwxr-xr-x 2 root root 4096 Apr 13 23:25 world_innodb

-rw-r--r-- 1 root root 13 Apr 13 23:25 xtrabackup_binary

-rw-r--r-- 1 root root 23 Apr 13 23:25 xtrabackup_binlog_info

-rw-r--r-- 1 root root 79 Apr 13 23:25 xtrabackup_checkpoints

-rw-r--r-- 1 root root 2560 Apr 13 23:25 xtrabackup_logfile

-rw-r--r-- 1 root root 72 Apr 13 23:25 xtrabackup_slave_info

drwxr-xr-x 2 root root 4096 Apr 13 23:25 yayun

[root@MySQL-02 ~]#

查看xtrabackup_slave_info文件内容,这个内容就是为搭建从库时需要change master to的参数:

[root@MySQL-02 ~]# cat /data/cloneslave/xtrabackup_slave_info

CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=732

[root@MySQL-02 ~]#

在老的slave服务器上进行还原,即192.168.0.20

[root@MySQL-02 ~]# innobackupex --apply-log --redo-only /data/cloneslave/

xtrabackup: starting shutdown with innodb_fast_shutdown = 1

140413 23:30:37 InnoDB: Starting shutdown...

140413 23:30:37 InnoDB: Shutdown completed; log sequence number 12981048

140413 23:30:37 innobackupex: completed OK!

[root@MySQL-02 ~]#

将还原的文件复制到新的从库newslave,即192.168.0.100

[root@MySQL-02 data]# rsync -avprP -e ssh /data/cloneslave/ 192.168.0.100:/data/mysql/

在主库master上添加对新从库newslave的授权:

mysql> grant replication slave on *.* to 'repl'@'192.168.0.100' identified by '123456';

Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;

Query OK, 0 rows affected (0.02 sec)

mysql>

拷贝老的从库的配置文件到新的从库newslave,并且修改server-id参数,修改完毕后,启动新的从库;

[root@MySQL-02 data]# scp /etc/my.cnf 192.168.0.100:/etc/

root@192.168.0.100's password:

my.cnf 100% 4881 4.8KB/s 00:00

[root@MySQL-02 data]#

[root@newslave mysql]# egrep 'log-slave|^server-id|skip_slave' /etc/my.cnf

server-id = 3

skip_slave_start

log-slave-updates=1

[root@newslave mysql]#

[root@newslave mysql]# chown -R mysql.mysql .

[root@newslave mysql]# /etc/init.d/mysqld restart

Shutting down MySQL. [ OK ]

Starting MySQL.. [ OK ]

[root@newslave mysql]#

查找老的从库备份后生成的xtrabackup_slave_info文件,提取其中的master_log_file和master_log_pos信息,然后在新的从库上进行change master to操作:

在新的从库上进行同步:

mysql> CHANGE MASTER TO MASTER_HOST='192.168.0.10',MASTER_USER='repl', MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=732;

Query OK, 0 rows affected (0.09 sec)

mysql>

启动io线程和sql线程,并观察复制是否正常:

mysql> start slave;

Query OK, 0 rows affected (0.00 sec)

mysql>

mysql> show slave status\G

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 192.168.0.10

Master_User: repl

Master_Port: 3306

Connect_Retry: 2

Master_Log_File: mysql-bin.000006

Read_Master_Log_Pos: 1309

Relay_Log_File: MySQL-02-relay-bin.000002

Relay_Log_Pos: 830

Relay_Master_Log_File: mysql-bin.000006

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Replicate_Do_DB:

Replicate_Ignore_DB:

Replicate_Do_Table:

Replicate_Ignore_Table:

Replicate_Wild_Do_Table: yayun.%

Replicate_Wild_Ignore_Table:

Last_Errno: 0

Last_Error:

Skip_Counter: 0

Exec_Master_Log_Pos: 1309

Relay_Log_Space: 989

Until_Condition: None

Until_Log_File:

Until_Log_Pos: 0

Master_SSL_Allowed: No

Master_SSL_CA_File:

Master_SSL_CA_Path:

Master_SSL_Cert:

Master_SSL_Cipher:

Master_SSL_Key:

Seconds_Behind_Master: 0

Master_SSL_Verify_Server_Cert: No

Last_IO_Errno: 0

Last_IO_Error:

Last_SQL_Errno: 0

Last_SQL_Error:

Replicate_Ignore_Server_Ids:

Master_Server_Id: 1

1 row in set (0.00 sec)

mysql>

查看主库,发现已经有两个线程(Binlog Dump)

mysql> show processlist\G

*************************** 1. row ***************************

Id: 8

User: slave

Host: 192.168.0.20:44251

db: NULL

Command: Binlog Dump

Time: 1088

State: Master has sent all binlog to slave; waiting for binlog to be updated

Info: NULL

*************************** 2. row ***************************

Id: 9

User: root

Host: localhost

db: yayun

Command: Query

Time: 0

State: NULL

Info: show processlist

*************************** 3. row ***************************

Id: 10

User: repl

Host: 192.168.0.100:45844

db: NULL

Command: Binlog Dump

Time: 124

State: Master has sent all binlog to slave; waiting for binlog to be updated

Info: NULL

3 rows in set (0.00 sec)

mysql>

正常工作,到此在线克隆slave就结束啦。


这篇关于Centos 6.9 安装xtrabackup-2.4.8 通用包,yum安装,全量备份,增量备份的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/394638

相关文章

Zookeeper安装和配置说明

一、Zookeeper的搭建方式 Zookeeper安装方式有三种,单机模式和集群模式以及伪集群模式。 ■ 单机模式:Zookeeper只运行在一台服务器上,适合测试环境; ■ 伪集群模式:就是在一台物理机上运行多个Zookeeper 实例; ■ 集群模式:Zookeeper运行于一个集群上,适合生产环境,这个计算机集群被称为一个“集合体”(ensemble) Zookeeper通过复制来实现

CentOS7安装配置mysql5.7 tar免安装版

一、CentOS7.4系统自带mariadb # 查看系统自带的Mariadb[root@localhost~]# rpm -qa|grep mariadbmariadb-libs-5.5.44-2.el7.centos.x86_64# 卸载系统自带的Mariadb[root@localhost ~]# rpm -e --nodeps mariadb-libs-5.5.44-2.el7

Centos7安装Mongodb4

1、下载源码包 curl -O https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.1.tgz 2、解压 放到 /usr/local/ 目录下 tar -zxvf mongodb-linux-x86_64-rhel70-4.2.1.tgzmv mongodb-linux-x86_64-rhel70-4.2.1/

Centos7安装JDK1.8保姆版

工欲善其事,必先利其器。这句话同样适用于学习Java编程。在开始Java的学习旅程之前,我们必须首先配置好适合的开发环境。 通过事先准备好这些工具和配置,我们可以避免在学习过程中遇到因环境问题导致的代码异常或错误。一个稳定、高效的开发环境能够让我们更加专注于代码的学习和编写,提升学习效率,减少不必要的困扰和挫折感。因此,在学习Java之初,投入一些时间和精力来配置好开发环境是非常值得的。这将为我

安装nodejs环境

本文介绍了如何通过nvm(NodeVersionManager)安装和管理Node.js及npm的不同版本,包括下载安装脚本、检查版本并安装特定版本的方法。 1、安装nvm curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.0/install.sh | bash 2、查看nvm版本 nvm --version 3、安装

计算机毕业设计 大学志愿填报系统 Java+SpringBoot+Vue 前后端分离 文档报告 代码讲解 安装调试

🍊作者:计算机编程-吉哥 🍊简介:专业从事JavaWeb程序开发,微信小程序开发,定制化项目、 源码、代码讲解、文档撰写、ppt制作。做自己喜欢的事,生活就是快乐的。 🍊心愿:点赞 👍 收藏 ⭐评论 📝 🍅 文末获取源码联系 👇🏻 精彩专栏推荐订阅 👇🏻 不然下次找不到哟~Java毕业设计项目~热门选题推荐《1000套》 目录 1.技术选型 2.开发工具 3.功能

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

K8S(Kubernetes)开源的容器编排平台安装步骤详解

K8S(Kubernetes)是一个开源的容器编排平台,用于自动化部署、扩展和管理容器化应用程序。以下是K8S容器编排平台的安装步骤、使用方式及特点的概述: 安装步骤: 安装Docker:K8S需要基于Docker来运行容器化应用程序。首先要在所有节点上安装Docker引擎。 安装Kubernetes Master:在集群中选择一台主机作为Master节点,安装K8S的控制平面组件,如AP

衡石分析平台使用手册-单机安装及启动

单机安装及启动​ 本文讲述如何在单机环境下进行 HENGSHI SENSE 安装的操作过程。 在安装前请确认网络环境,如果是隔离环境,无法连接互联网时,请先按照 离线环境安装依赖的指导进行依赖包的安装,然后按照本文的指导继续操作。如果网络环境可以连接互联网,请直接按照本文的指导进行安装。 准备工作​ 请参考安装环境文档准备安装环境。 配置用户与安装目录。 在操作前请检查您是否有 sud

mac安装brew 与 HomeBrew

/bin/zsh -c "$(curl -fsSL https://gitee.com/cunkai/HomebrewCN/raw/master/Homebrew.sh)" curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh >> brew_install BREW_REPO="