MyDumper เป็นเครื่องมือสำรองข้อมูลเชิงตรรกะ MySQL มี 2 เครื่องมือ:
mydumper
ซึ่งมีหน้าที่ส่งออกข้อมูลสำรองฐานข้อมูล MySQL ที่สอดคล้องกันmyloader
อ่านข้อมูลสำรองจาก mydumper เชื่อมต่อกับฐานข้อมูลปลายทาง และนำเข้าข้อมูลสำรอง เครื่องมือทั้งสองใช้ความสามารถแบบมัลติเธรด
MyDumper เป็น Open Source และดูแลโดยชุมชน ไม่ใช่ผลิตภัณฑ์ Percona, MariaDB หรือ MySQL
เอกสารราชการ (อยู่ระหว่างดำเนินการ)
ส่วนนี้ได้ถูกย้ายแล้ว
ก่อนอื่นให้รับ URL ที่ถูกต้องจากส่วนการเผยแพร่แล้ว:
release= $( curl -Ls -o /dev/null -w %{url_effective} https://github.com/mydumper/mydumper/releases/latest | cut -d ' / ' -f8 )
yum install https://github.com/mydumper/mydumper/releases/download/ ${release} /mydumper- ${release : 1} .el7.x86_64.rpm
yum install https://github.com/mydumper/mydumper/releases/download/ ${release} /mydumper- ${release : 1} .el8.x86_64.rpm
สำหรับ Ubuntu คุณต้องติดตั้งการพึ่งพา:
apt-get install libatomic1
จากนั้นคุณสามารถดาวน์โหลดและติดตั้งแพ็คเกจได้:
release= $( curl -Ls -o /dev/null -w %{url_effective} https://github.com/mydumper/mydumper/releases/latest | cut -d ' / ' -f8 )
wget https://github.com/mydumper/mydumper/releases/download/ ${release} /mydumper_ ${release : 1} . $( lsb_release -cs ) _amd64.deb
dpkg -i mydumper_ ${release : 1} . $( lsb_release -cs ) _amd64.deb
โดยใช้ pkg
pkg install mydumper
หรือจากท่าเรือ
cd /usr/ports/databases/mydumper && make install
โดยใช้โฮมบรูว์
brew install mydumper
โปรดทราบว่าไฟล์ mydumper.cnf จะอยู่ที่ /usr/local/etc หรือ /opt/homebrew/etc ดังนั้นคุณอาจต้องรัน mydumper/myloader ด้วย:
mydumper --defaults-file=/opt/homebrew/etc/mydumper.cnf
myloader --defaults-file=/opt/homebrew/etc/mydumper.cnf
apt-get install cmake g++ git
yum install -y cmake gcc gcc-c++ git make
sudo port install cmake pkgconfig
apt-get install libglib2.0-dev zlib1g-dev libpcre3-dev libssl-dev libzstd-dev
yum install -y glib2-devel openssl-devel pcre-devel zlib-devel libzstd-devel
zypper install glib2-devel libmysqlclient-devel pcre-devel zlib-devel
sudo port install glib2 pcre
คุณต้องเลือกไลบรารีการพัฒนาผู้จัดจำหน่ายหนึ่งรายการ
apt-get install libmysqlclient-dev
apt-get install libperconaserverclient20-dev
apt-get install libmariadbclient-dev
yum install -y mysql-devel
yum install -y Percona-Server-devel-57
yum install -y mariadb-devel
CentOS 7 มาพร้อมกับไลบรารี MariaDB 5.5 ซึ่งเก่ามากเป็นค่าเริ่มต้น มันอาจจะดีกว่าถ้าดาวน์โหลดไลบรารี่เหล่านี้เวอร์ชันใหม่กว่า (MariaDB, MySQL, Percona ฯลฯ)
zypper install libmysqlclient-devel
sudo port install mariadb-10.11
sudo port select mysql
วิ่ง:
cmake .
make
sudo make install
เราต้องแน่ใจว่า pkg-config, mysql_config, pcre-config นั้นทั้งหมดอยู่ใน $PATH
Binlog dump ถูกปิดใช้งานโดยค่าเริ่มต้นเพื่อคอมไพล์คุณต้องเพิ่ม -DWITH_BINLOG=ON ให้กับตัวเลือก cmake
หากต้องการสร้างเทียบกับ mysql libs <5.7 คุณต้องปิดการใช้งานการเพิ่ม SSL -DWITH_SSL=OFF
คุณสามารถดาวน์โหลดอิมเมจนักเทียบท่าอย่างเป็นทางการหรือสร้างอิมเมจ Docker จากแหล่งในเครื่องหรือจากแหล่ง Github โดยตรงด้วย Dockerfile ที่ให้มา
docker build --build-arg CMAKE_ARGS= ' -DWITH_ZSTD=ON ' -t mydumper github.com/mydumper/mydumper
โปรดทราบว่าวัตถุประสงค์หลักที่อยู่ Dockerfile คือการพัฒนาและสร้างจากแหล่งที่มาในเครื่อง มันอาจจะไม่เหมาะสมที่สุดสำหรับวัตถุประสงค์ในการจัดจำหน่าย แต่ยังสามารถทำงานเป็นโซลูชันการสร้างและรันอย่างรวดเร็วด้วย one-liner ข้างต้นได้
ดูการใช้งาน
ทั้งหมดนี้ทำตามแนวทางปฏิบัติและประเพณี MySQL ที่ดีที่สุด:
ขณะนี้ยังไม่มีสแนปชอตที่สอดคล้องกันสำหรับเอ็นจิ้นที่ไม่ใช่ธุรกรรม - รองรับสิ่งที่คาดหวังใน 0.2 :)
เมื่อสามารถใช้ฟังก์ชัน --regex ได้ เช่น ไม่ต้องดัมพ์ mysql, sys และฐานข้อมูลทดสอบ:
mydumper --regex ' ^(?!(mysql.|sys.|test.)) '
หากต้องการถ่ายโอนข้อมูลเฉพาะฐานข้อมูล mysql และทดสอบ:
mydumper --regex ' ^(mysql.|test.) '
หากต้องการไม่ดัมพ์ฐานข้อมูลทั้งหมดที่เริ่มต้นด้วยการทดสอบ:
mydumper --regex ' ^(?!(test)) '
หากต้องการดัมพ์ตารางเฉพาะในฐานข้อมูลที่แตกต่างกัน (หมายเหตุ: ชื่อของตารางควรลงท้ายด้วย $. ปัญหาที่เกี่ยวข้อง):
mydumper --regex ' ^(db1.table1$|db2.table2$) '
หากคุณต้องการดัมพ์ฐานข้อมูลบางส่วนแต่ละทิ้งบางตาราง คุณสามารถทำได้:
mydumper --regex ' ^(?=(?:(db1.|db2.)))(?!(?:(db1.table1$|db2.table2$))) '
ซึ่งจะดัมพ์ตารางทั้งหมดใน db1 และ db2 แต่จะไม่รวม db1.table1 และ db2.table2
แน่นอนว่าฟังก์ชัน regex สามารถใช้เพื่ออธิบายรายการตารางได้ค่อนข้างมาก
คุณสามารถรันคำสั่งภายนอกด้วย --exec ดังนี้:
mydumper --exec " /usr/bin/gzip FILENAME "
--exec เป็นแบบเธรดเดียว การใช้งานที่คล้ายกันมากกว่า Stream โปรแกรม exec ต้องเป็นเส้นทางที่แน่นอน FILENAME จะถูกแทนที่ด้วยชื่อไฟล์ที่คุณต้องการประมวลผล คุณสามารถตั้งค่า FILENAME ในตำแหน่งใดก็ได้เป็นอาร์กิวเมนต์
ไฟล์เริ่มต้น (aka: --defaults-file parameter) เริ่มมีความสำคัญมากขึ้นใน MyDumper
[mydumper]
host = 127.0.0.1
user = root
password = p455w0rd
database = db
rows = 10000
[myloader]
host = 127.0.0.1
user = root
password = p455w0rd
database = new_db
innodb-optimize-keys = AFTER_IMPORT_PER_TABLE
ก่อนหน้า v0.14.0-1:
[mydumper_variables]
wait_timeout = 300
sql_mode = ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
[myloader_variables]
long_query_time = 300
innodb_flush_log_at_trx_commit = 0
จากถึง v0.14.0-1:
[mydumper_session_variables]
wait_timeout = 300
sql_mode = ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
[mydumper_global_variables]
sync_binlog = 0
slow_query_log = OFF
[myloader_session_variables]
long_query_time = 300
[myloader_global_variables]
sync_binlog = 0
innodb_flush_log_at_trx_commit = 0
[ ` db ` . ` table ` ]
where = column > 20
limit = 10000
[ ` myd_test ` . ` t ` ]
columns_on_select=qty,price+20
columns_on_insert=qty,price
สิ่งสำคัญ: เมื่อใช้ตัวเลือกที่ไม่ต้องใช้อาร์กิวเมนต์ เช่น --no-data หรือ --events คุณจะต้องตั้งค่าใดๆ ให้กับตัวแปรที่จะระบุเสมอว่า: TRUE/ON/ENABLE มันเป็นความเข้าใจผิดหากคุณคิดว่าการเพิ่ม --no-data=0
จะส่งออกข้อมูล:
[mydumper]
no-data=0
จะไม่ส่งออกข้อมูลเนื่องจากไม่มีการระบุข้อมูล