Linux: วิธีคืนค่าไฟล์กำหนดค่าโดยใช้ apt-get / aptitude?


37

บางครั้งฉันทำแฟ้มปรับแต่ง "/etc/mysql/my.cnf" ของฉันหายไปและต้องการกู้คืน ไฟล์เป็นของแพ็คเกจmysql-commonที่จำเป็นสำหรับการทำงานที่สำคัญบางอย่างดังนั้นฉันไม่สามารถทำได้purge && install: การพึ่งพาจะถูกถอนการติดตั้งด้วย (หรือถ้าฉันสามารถเพิกเฉยได้ชั่วคราวพวกเขาจะไม่ทำงาน)

มีวิธีกู้คืนไฟล์กำหนดค่าจากแพ็คเกจโดยไม่ลบarไฟล์แพ็คเกจหรือไม่

dpkg-reconfigure mysql-common ไม่ได้กู้คืน


ฉันได้เสมอเพียงสกัดไฟล์แพคเกจที่มี 7zip ( 7z x /path/to/foo.debแล้ว7z x data.tar.gz) ....
นักต้มตุ๋น Quixote

โดยส่วนตัวฉันชอบตั้งค่าบางอย่างเช่น etckeeper บนระบบของฉันทันทีหลังจากที่ฉันติดตั้ง ด้วยวิธีนี้การเปลี่ยนแปลงและเวอร์ชันของไฟล์การกำหนดค่าจะถูกเก็บไว้ ( serverfault.com/questions/13091/advice-on-storing-etc-in-a-vcs )
Zoredache

4
และนี้เด็กเป็นเหตุผลที่เรามีการสำรองข้อมูล ...
womble

1
@ womble: จริง ๆ แล้วสถานการณ์แตกต่างกันเล็กน้อย: ฉันมีไฟล์กำหนดค่า แต่มันแก้ไขโดยฉัน ฉันไม่ได้ใช้conf.dโฟลเดอร์และเมื่อผู้ดูแลแพคเกจอัปเดตกระบวนการอัพเกรดกลายเป็นความกระตือรือร้นในการแสดงข้อความ "config file modified" :) เหตุผลไม่สำคัญที่จะพูดถึงดังนั้นฉันตัดสินใจที่จะลดความซับซ้อนของคำถาม
kolypto

คำตอบ:


39

dpkg -i --force-confmiss mysql-common.debจะสร้างไฟล์การกำหนดค่าที่หายไปเช่น/etc/mysql/my.cnfในกรณีของคุณ


7
ขอบคุณ! ใน Ubuntu มันเป็นsudo dpkg --force-confmiss -i /var/cache/apt/archives/mysql-common*.deb
kolypto

10

ใน Debian Squeeze - อย่างน้อย - เราก็สามารถทำเช่นนี้ได้หลังจากsu- หรือsudoสำหรับ Ubuntu -

aptitude install -o Dpkg::Options::=--force-confmiss mysql-server

นี้จะดูแลการอ้างอิงของmysql-serverและการตั้งค่าทั้งหมดที่หายไป conf mysql-commonไฟล์ของจำนวนมากรวมทั้ง ไฟล์ที่ขัดแย้ง (ที่เหลือ) จะได้รับการแจ้งเตือนให้เก็บหรือรีเซ็ต

น่าเสียดายที่มีข้อบกพร่องในความถนัดและ

aptitude purge -o Dpkg::Options::=--force-all mysql-server

จะไม่ทำงาน ดังนั้นเราต้องทำทีละอย่างด้วย

dpkg --force-all --purge  mysql-common  mysql-server  mysql-client …

การดำเนินการนี้จะลบไฟล์ปรับแต่งใด ๆต้นฉบับหรือแก้ไขแต่ไฟล์ที่กำหนดเองจะถูกเก็บไว้ด้วยข้อความบนหน้าจอ หมายเหตุโดยวิธีการที่dpkgยังรับรู้--force-confnewและ--force-confoldตัวเลือก

ในการรับmysql-serverรายการการพึ่งพา 'พิมพ์บนหน้าจอ:

aptitude --simulate remove mysql-server

9

ไม่ได้ผลสำหรับฉัน - อาจจะล้าสมัย - ต่อไปฉันพบวิธีแก้ปัญหานี้แล้ว:

apt-get -o Dpkg::Options::="--force-confmiss" install --reinstall mysql-common

นี่คือคำสั่งที่ใช้เนื่องจากความถนัดไม่ได้เป็นค่าเริ่มต้น อย่าลืม sudo :)
nsn

3

คุณสามารถค้นหาไฟล์ config mysql ที่เป็นค่าเริ่มต้นได้ใน/usr/share/doc/mysql-server-5.0/examples/หรือที่คล้ายกัน นั่นอาจเป็นสิ่งที่คุณต้องการเว้นแต่คุณจะเปิดใช้งานการกำหนดค่าพิเศษ / ความลับบางอย่าง


0

ในของฉัน/etc/mysql/ไดเรกทอรีผมมีไฟล์ที่มีเนื้อหาเดิมของmy.cnf.origmy.cnf

ฉันไม่แน่ใจว่า/etc/mysql/my.cnf.origมาจากไหน- นั่นคือไม่ว่าฉันจะสร้างมันขึ้นมาหรือติดตั้ง mysql ผมจำได้ว่าการตรวจสอบในครั้งเดียวว่ามันก็เหมือนกับmy.cnf

หากคุณมีสิ่งนั้นและไม่มี my.cnfคุณสามารถคัดลอกหนึ่งไปยังอีก

sudo cp /etc/mysql/my.cnf.orig /etc/mysql/my.cnf

ไม่ว่าในกรณีใดมันเป็นไฟล์ข้อความธรรมดาขนาด 3897 ไบต์และคุณสามารถคัดลอกและวางจากไฟล์กำหนดค่า Mysql ทั่วไปได้

มันจะเป็นความคิดที่ดีเมื่อคุณเรียกคืนของคุณ/etc/mysql/my.cnfเพื่อทำสำเนาเพื่อให้คุณสามารถเรียกคืนได้อย่างง่ายดายในอนาคต


ฉันมักจะทำการสำรองข้อมูลไฟล์การติดตั้งดั้งเดิมโดยการคัดลอกไปที่/path/to/foo.conf.orig... หากไฟล์เหล่านี้ถูกติดตั้งโดยอัตโนมัติพวกมันจะถูกสร้างขึ้นเมื่อ apt-get กำลังติดตั้งเวอร์ชันใหม่และตรวจพบว่าคุณได้แก้ไขไฟล์การกำหนดค่าดั้งเดิม
ต้มตุ๋น Quixote

อืมฉันยิ่งคิดถึงมันมากเท่าไหร่ดูเหมือนว่าฉันจะสร้าง/etc/mysql/my.cnf.origเป็นข้อมูลสำรองซึ่งจะไม่ถูกเขียนทับด้วยการติดตั้งใหม่ แต่การวางไว้ที่ไหนสักแห่งที่แตกต่างอย่างสิ้นเชิงเป็นความคิดที่ดี
pavium

ฉันพยายามเป็นคนธรรมดา สำหรับ my.cnf /etc/mysql/my.cnf.origฉันจะคัดลอกไป /etcจากนั้นตามธรรมชาติทำให้การสำรองข้อมูลของ tarball :)
ต้มตุ๋น quixote

0

คุณต้องติดตั้ง mysql-common ใหม่ด้วยคำสั่งนี้:apt-get install --reinstall mysql-common


นั่นเรียกคืนไฟล์คอนฟิกูเรชันที่หายไปจริง ๆ หรือไม่?
poolie

1
ไม่มันไม่ทำงาน
chrishiestand

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.