Mysql ส่งออกการกำหนดค่าปัจจุบันไปยังไฟล์


11

เราสูญเสียไฟล์ my.cnf ของเราและสงสัยว่ามีวิธีการส่งออกสำเนาจากอินสแตนซ์ mysql ที่กำลังทำงานอยู่หรือไม่

ขอบคุณ!

คำตอบ:


16

ตัวเลือกสาม (3)

ตัวเลือก 1: จากภายในไคลเอนต์ mysql

mysql -uroot -A -e"SHOW GLOBAL VARIABLES;" > MySQLCurrentSettings.txt

วิธีนี้จะจับภาพตัวเลือกทั้งหมดลงในไฟล์ข้อความ

ตัวเลือก 2: จากบรรทัดคำสั่ง Linux

ps -ef | grep mysqld | grep -v grep

สิ่งนี้จะแสดงตัวเลือก mysqld ที่เริ่มต้นด้วยการตั้งค่าจาก mysqld_safe

ตัวเลือก 3: ถามเซิร์ฟเวอร์โดยตรง

mysqld --help --verbose

ที่ด้านล่างของจอแสดงผล 'mysqld --help --verbose' คุณจะเห็นการตั้งค่าปัจจุบัน mysqld โหลดจาก my.cnf หรือผิดนัด


-1 ขออภัย แต่มันก็ไม่สมเหตุสมผล เหตุใดคุณจึงทิ้ง SHOW VARIABLES ไปยังไฟล์ข้อความแล้วทำ greping รายการกระบวนการและไม่ทำอะไรกับผลลัพธ์ของมันแล้วบอกว่าอ่านแฟล็กวิธีใช้เป็น mysqld
Coops

@Coops - มีสามสิ่งแยกกัน ครั้งแรกที่รวบรวม SHOW VARIABLES ในไฟล์ข้อความ ตัวที่สองให้คุณเห็นตัวเลือกที่ระบุโดย /etc/init.d/mysql เมื่อเริ่มต้น mysql ที่สามให้คุณดูที่ครึ่งล่างของจอแสดงผลที่ mysqld ใช้งานอยู่ในปัจจุบัน มันขึ้นอยู่กับ samspot ที่จะทำงานขาตั้งค่าตัวเลือกเหล่านั้นใน /etc/my.cnf จากจอแสดงผลเหล่านี้ ฉันควรจะเขียนสิ่งที่ทำให้เป็นอัตโนมัติและสร้างใหม่ /etc/my.cnf หรือไม่?
RolandoMySQLDBA

บรรทัดเริ่มต้นของคุณคือ "ทำสิ่งต่อไปนี้ทั้งหมด" แนะนำให้คุณให้คำแนะนำทีละขั้นตอนเพื่อให้ได้คำตอบสำหรับคำถาม คุณไม่ต้องอธิบายว่าแต่ละขั้นตอนทำอะไรหรือจะตอบคำถามอย่างไรเพิ่มความสับสน! :-)
Coops

ขออภัยในความสับสนที่เกิดจากวิธีที่ฉันเขียนคำตอบของฉันในตอนแรก
RolandoMySQLDBA

แม้ว่าการสร้างใหม่ my.cnf จะเป็นกรณีที่ดีที่สุด (ฉันหวังว่า mysql สามารถทำสิ่งนี้ได้) นี่เป็นข้อมูลที่ยอดเยี่ยมสำหรับเราในการกู้คืน ฉันลองใช้ googling สำหรับข้อมูลนี้ แต่สิ่งที่ฉันสามารถหาได้คือบทความเกี่ยวกับการสำรองฐานข้อมูล ขอบคุณ!
samspot

3

คำแนะนำเหล่านี้สำหรับ mariadb ของหุ้นใน centos 7.1

ต่อไปนี้เป็นวิธีการสำรองหรือทำซ้ำการตั้งค่าปัจจุบันของเครื่องไปยังการติดตั้งใหม่นำเสนอหรือในอนาคต

บนเครื่องที่เราต้องการคัดลอกการตั้งค่าเราสามารถเรียกใช้:

/usr/libexec/mysqld --help --verbose > mysql_current_settings.txt

ในเครื่องอื่นเราสามารถติดตั้ง mariadb-server และเรียกใช้:

/usr/libexec/mysqld --help --verbose > mysql_default_settings.txt

จากนั้นเราจะใส่ทั้งสองไฟล์ไว้ในไดเรกทอรีเดียวซึ่งในตัวอย่างนี้คือ "/ a /"

จากนั้นเราก็เรียกใช้:

comm -3 <(sort /a/mysql_current_settings.txt) <(sort /a/mysql_default_settings.txt)

หากไม่มีเอาต์พุตแสดงว่าทั้งสองไฟล์เหมือนกัน ซึ่งหมายความว่าการตั้งค่าทั้งหมดบนเครื่องทั้งสองเป็นค่าเริ่มต้น

หากมีการส่งออกบางส่วนแล้วบางบรรทัดจะไม่เยื้องในขณะที่บางบรรทัดจะเยื้อง

บรรทัดที่ไม่มีการเยื้องจะปรากฏเฉพาะในไฟล์แรกซึ่งนี่คือ /a/mysql_current_settings.txt

บรรทัดเยื้องจะปรากฏเฉพาะในไฟล์ที่สองซึ่งนี่คือ /a/mysql_default_settings.txt

ตอนนี้เรารู้ว่าการตั้งค่าทั้งหมดยกเว้นการตั้งค่าบางอย่างซึ่งตั้งอยู่ในบรรทัดคำสั่งซึ่งเริ่ม mysqld การตั้งค่าเหล่านี้อาจมาจาก /etc/my.cnf หรือ /etc/my.cnf.d/* ไฟล์หรือสคริปต์ที่กำหนดเองหรือนามแฝง ฯลฯ ในกรณีใด ๆ เราสามารถดูได้ด้วยคำสั่งต่อไปนี้:

ps -ef | grep mysqld

ตอนนี้เรารู้การตั้งค่าน้อยมากที่เราต้องเปลี่ยนในการติดตั้งใหม่เพื่อกำหนดค่าให้เป็นแบบเก่า


ที่นี่ติดตามรายละเอียดอื่น ๆ

บน centos 7.1 คำสั่งต่อไปนี้แสดงการตั้งค่าปัจจุบันทั้งหมดยกเว้นการตั้งค่าบางอย่างซึ่งตั้งค่าในบรรทัดคำสั่งซึ่งเริ่ม mysqld:

/usr/libexec/mysqld --help --verbose

โดยรวมจะแสดง:

ในส่วนแรกการตั้งค่าที่เราสามารถใช้เป็นพารามิเตอร์แรกหลังจาก "mysqld" เมื่อเราเริ่มมัน

ในส่วนที่สองการตั้งค่าที่รวบรวมเวลา;

ในส่วนที่สามการตั้งค่าปัจจุบัน

แม้ว่าบรรทัดสุดท้ายของเอาต์พุตจะพูดว่า: เพื่อดูว่าเซิร์ฟเวอร์ MySQL ที่ใช้งานนั้นให้ค่าอะไรให้พิมพ์:

    mysqladmin variables -uroot -p

คำสั่งนั้นจะไม่แสดง fe, bind-address แม้ว่าเราจะเปลี่ยนใน /etc/my.cnf และเริ่ม mysql ใหม่

คำสั่งต่อไปนี้ยังแสดงการตั้งค่าต่าง ๆ แต่ไม่ใช่ "bind-address":

mysql -uroot -p -e"SHOW VARIABLES;"

โปรดทราบว่าบน centos 7.1 mysqld ไม่ได้อยู่ใน $ PATH


2

นี่คือวิธีที่ฉันโปรดปรานในการสร้าง my.cnf ปัจจุบัน:

{ echo -e "# MYSQL VARIABLES {{{1\n##\n# MYSQL `mysql -V|sed 's,^.*\(V.*\)\, for.*,\1,'` - By: `logname`@`hostname -f` on `date +%c`\n##"; for l in {a..z}; do echo '#'; mysql -NBe "SHOW GLOBAL VARIABLES LIKE '${l}%'" | sed 's,\t,^= ,' | column -ts^ | tr "\n" '@' | eval $(echo "sed '" "s,@\("{a..u}{a..z}"\),\n\n\1,;" "'") | eval $(echo "sed '" "s,@\(innodb_"{a..z}{a..z}"\),\n\n\1,;" "'") | tr '@' "\n" | sed 's,^,# ,g'; done; echo -e "#\n##\n# MYSQL VARIABLES }}}1"; } | tee ~/mysql-variables.log

อย่างไรก็ตามสิ่งนี้ไม่สามารถทำงานได้อย่างน่าเชื่อถือสำหรับ Mac OS X

การทำเช่นนี้จะแสดงผลบันทึกตัวแปรสะอาดแสดงความคิดเห็นพร้อมที่จะนำเข้าสู่ my.cnf ของคุณ

แหล่งต้นฉบับ: http://www.askapache.com/mysql/view-mysql-variables-my-cnf.html


หมายเหตุบางประการ: 1. ต้องติดตั้ง bsdmainutils 2. คำเตือน: มันเขียนเวอร์ชั่นของไคลเอนต์ mysql ไม่ใช่เซิร์ฟเวอร์
ลง

mysqld -V|sed 's,^.*\(V.*\)\ for.*,\1,'สำหรับรุ่นเซิร์ฟเวอร์คำสั่งคือ ไม่แน่ใจว่าสำคัญเพราะฉันคิดว่าทั้งไคลเอนต์และเซิร์ฟเวอร์ติดตั้งพร้อมกัน มีจุดประสงค์อะไร{{{1และ1}}}?
beppe9000
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.