อัพเกรด 16.04 ยากจนเซิร์ฟเวอร์ MySQL


127

การอัปเกรดโดยรวมของฉันไปได้ด้วยดี แต่ฉันก็ยังมีปัญหาที่ยืดเยื้ออย่างยิ่งของ mysql-server ที่ไม่สามารถติดตั้งตัวเองได้และไม่มีอะไรที่ฉันพยายามจะทำให้มันทำงานได้

นี่เป็นข้อผิดพลาดที่ฉันเห็นเมื่อพยายามติดตั้ง / ติดตั้งใหม่:

Setting up mysql-server-5.7 (5.7.11-0ubuntu6) ...
Job for mysql.service failed because the control process exited with error code. See "systemctl status mysql.service" and "journalctl -xe" for details.
invoke-rc.d: initscript mysql, action "start" failed.
dpkg: error processing package mysql-server-5.7 (--configure):
 subprocess installed post-installation script returned error exit status 1
dpkg: dependency problems prevent configuration of mysql-server:
 mysql-server depends on mysql-server-5.7; however:
  Package mysql-server-5.7 is not configured yet.

dpkg: error processing package mysql-server (--configure):
 dependency problems - leaving unconfigured
No apport report written because the error message indicates its a followup error from a previous failure.
                   Processing triggers for systemd (229-4ubuntu4) ...
Processing triggers for ureadahead (0.100.0-19) ...
Errors were encountered while processing:
 mysql-server-5.7
 mysql-server
E: Sub-process /usr/bin/dpkg returned an error code (1)

ฉันพยายามลบออกอย่างสมบูรณ์แล้ว แต่พยายามติดตั้ง MariaDB เนื่องจากการพึ่งพา (?) ข้อเสนอแนะใด ๆ เกี่ยวกับสิ่งที่ฉันสามารถทำได้เพื่อแก้ไขปัญหานี้จะยินดีมากที่สุด

แก้ไข: ดูเหมือนว่าฉันไม่ใช่คนเดียว: https://bugs.launchpad.net/ubuntu/+source/mysql-5.7/+bug/1573279


ฉันมีปัญหาเดียวกันที่นี่
KernelPanic

1
ต้องถอนการติดตั้ง phpmyadmin ซึ่งก่อให้เกิดปัญหาการพึ่งพาอย่างใด หลังจากติดตั้งใหม่ทุกอย่างทำงานได้ดีอีกครั้ง
Hinrich

1
do-release-upgrade จาก Ubuntu 14 ถึง 16 ทำการอัพเกรดที่ไม่รองรับจาก MySQL 5.5 เป็น 5.7 ดังนั้นจึงคาดว่า MySQL จะไม่ทำงานตามที่รายงานไว้ที่นี่: bugs.launchpad.net/ubuntu/+source/ubuntu-release-upgrader/ + bug / …
Marco Marsala

1
@MarcoMarsala ฉันไม่รู้ว่าเราสามารถพูดได้หรือไม่ว่า MySQL จะถูกทำลายหลังจากอัพเกรด Ubuntu เป็น 14 ถึง 16 แม้ว่าฉันคิดว่ามันขึ้นอยู่กับมุมมองของคุณ สำหรับผู้ใช้โดยเฉลี่ยไม่คาดว่าจะมีการอัพเกรด LTS เช่น MySQL เป็นที่น่าแปลกใจที่ไม่ได้ถูกจับระหว่างการทดสอบ
TheGremlyn

apt install phpmyadmin - แก้ไขการติดตั้งข้างต้นโดยไม่จำเป็นต้องแตะ mysql หลังจาก ... go figure
Andy

คำตอบ:


119

คำแนะนำ @ andrew-beerman ที่โพสต์อยู่ในเส้นทางที่ถูกต้องแม้ว่าพวกเขาจะไม่ค่อยชัดเจนสำหรับฉันและดูเหมือนจะแนะนำมากกว่าที่จำเป็น ฉันรวบรวมคำตอบจากด้านบนและโพสต์ที่เป็นประโยชน์ในเธรดข้อผิดพลาด

เหล่านี้เป็นขั้นตอนที่ฉันทำเพื่อแก้ไข:

  1. สำรองข้อมูลของคุณmy.cnf fileใน/etc/mysqlและลบหรือเปลี่ยนชื่อ

    sudo mv /etc/mysql/my.cnf /etc/mysql/my.cnf.bak
    
  2. ลบโฟลเดอร์/etc/mysql/mysql.conf.d/โดยใช้

    sudo rm -r /etc/mysql/mysql.conf.d/
    
  3. ตรวจสอบว่าคุณไม่มีmy.cnfไฟล์ที่ถูกซ่อนไว้ที่อื่น (ฉันทำที่บ้านของฉัน!) หรือ/etc/alternatives/my.cnfใช้งานอยู่

    sudo find / -name my.cnf
    
  4. สำรองและลบ/etc/mysql/debian.cnfไฟล์ (ไม่แน่ใจว่าจำเป็น แต่ในกรณี)

    sudo mv /etc/mysql/debian.cnf /etc/mysql/debian.cnf.bak
    sudo apt purge mysql-server mysql-server-5.7 mysql-server-core-5.7
    sudo apt install mysql-server
    
  5. ในกรณีที่ syslog ของคุณแสดงข้อผิดพลาดเช่น "mysqld: ไม่สามารถอ่าน dir ของ '/etc/mysql/conf.d/'" สร้างลิงค์สัญลักษณ์:

    sudo ln -s /etc/mysql/mysql.conf.d /etc/mysql/conf.d
    

    sudo service mysql startจากนั้นบริการควรจะสามารถที่จะเริ่มต้นด้วย

มันทำให้มันใช้งานได้!


17
หลังจากการดำเนินการทั้งหมดเหล่านี้ (ฉันไม่ได้มาก่อน) ผมยังมีปัญหาข้อผิดพลาดเดียวกัน ...
เสิร์จ

5
คุณต้องลบ my.cnf. * ทุกตัวออกจากไดเร็กทอรี / etc / mysql มองหา my.cnf.backup, my.cnf.fallback และ my.cnf.migrated - ไฟล์เหล่านี้ทั้งหมดจะต้องถูกลบออกด้วย (สำรองก่อน!)
hitzi

8
@SergiiP sudo find / -name "my.cnf"อาจมีประโยชน์
starbeamrainbowlabs

1
mysql-server-core- ควรเป็น mysql-server-core-5.7 ทำงานอย่างอื่นเช่นเสน่ห์ ขอขอบคุณ!
David Tay

1
+1 คุณทำวันของฉัน! ยังเช้าและเย็น! ฉันติดอยู่
Max Yudin

56

วันนี้ฉันมีปัญหาเดียวกันหลังจากลองวิธีแก้ปัญหามากมายฉันพบว่าปัญหาคือคำสั่งsudo systemctl disable mysql.serviceที่ฉันใช้ในการปิดการใช้งาน MySQL auto start เพื่อให้ทำงานฉันเปิดใช้งานเซิร์ฟเวอร์ MySQL อีกครั้งโดยใช้คำสั่งsudo systemctl enable mysql.serviceและเรียกใช้กระบวนการอัปเกรดอีกครั้ง มันจบลงอย่างสมบูรณ์


5
ฉันพบปัญหาเดียวกันนี้และการแก้ไขเดียวกันนี้ได้ผลสำหรับฉัน
อัลเลน

5
ทำงานให้ฉัน ทำทุกวิธีได้ที่นี่ mysql ทำงานได้หลังจากนี้
Błażej Michalik

6
เหมือนกันที่นี่ - นี่ควรเป็นโพสต์ยอดนิยม
a1 ตัวเลขและตัวอักษร

3
ทำงานให้ฉันด้วย! ขอบคุณมาก. เพียงเพื่อจะชัดเจนทำงาน: และหลังจากที่วิ่งว่าsudo systemctl enable mysql.service sudo apt install -f
Fernando Paladini

นี่คือทั้งหมดที่ฉันต้องทำ ฉันปิดใช้งานการเริ่มอัตโนมัติตามที่อธิบายไว้โดย @naruto ฉันเปิดใช้งานการเริ่มอัตโนมัติและเรียกใช้ "sudo apt upgrade" แก้ไขแล้ว ควรเป็นคำตอบที่ดีที่สุด นี่เป็นวิธีที่ง่ายกว่ามากขึ้นได้มาตรฐานมากขึ้นและแก้ปัญหาได้ง่ายน้อยลง
Jack Holt

20

ข้อความแสดงข้อผิดพลาดของคุณมีบรรทัดนี้:

subprocess installed post-installation script returned error exit status 1

อย่างไรก็ตามชื่อนี้installed post-installation scriptไม่ได้กล่าวถึง หลังจาก tinkering มากผมพบว่าชื่อของมันคือ /var/lib/dpkg/info/mysql-server-5.7.postinst(ในกรณีของฉัน)

เปิดไฟล์นี้ด้วยsudo vi /var/lib/dpkg/info/mysql-server-5.7.postinstหรือแก้ไขที่คุณต้องการ

ที่ด้านบนเปลี่ยนบรรทัดที่ 3 (หรือมากกว่านั้น): set -eเป็นset -xบันทึกไฟล์ (ตัวเลือก-eคือ "ออกจากข้อผิดพลาด" -xหมายถึง "แสดงคำสั่งที่ดำเนินการอย่างชัดเจน" อย่างน่าจะเป็น)

Run sudo dpkg --configure -a --log /tmp/dpkg.log (ตัวเลือก - log เป็นทางเลือก) นอกจากนี้คุณยังสามารถเรียกใช้apt upgradeถ้าคุณรู้ว่ามันจะเป็นแพคเกจเดียวที่จะอัพเกรด

ตอนนี้คุณรับเอาท์พุทของmysql-server-5.7.postinstสคริปต์ทุบตีและคุณสามารถเข้าใจได้ว่ามีอะไรผิดปกติ

ในกรณีของฉันมันไม่ประสบความสำเร็จพยายามที่จะ (อีกครั้ง) เรียกใช้mysql_upgradeแต่นั่นไม่จำเป็นสำหรับการติดตั้ง mysql ที่กำหนดเองของฉัน ฉันแน่ใจว่าฉันรันด้วยตนเองมาก่อนสำเร็จแล้วและทุกอย่างก็ดี

ดังนั้นฉันจึงสั่งให้บรรทัด 321 (สำหรับ mysqld รุ่นเก่าลองใช้บรรทัดที่ 281)

#mysql_upgrade --defaults-file=/etc/mysql/debian.cnf || result=$?

และคำสั่งที่ล้มเหลวมาก่อนsudo apt upgrade(เรียกใช้อีกครั้ง) เสร็จเรียบร้อยแล้วและ dpkg ลบสถานะข้อผิดพลาดสำหรับแพ็คเกจนี้

ตอนนี้คุณสามารถตั้งค่ากลับset -xไปset -e(ดังกล่าวข้างต้น) และไม่ใส่เครื่องหมายข้อคิดเห็นบรรทัดอัพเกรด mysql

อาจจำเป็นต้องมีงานพิเศษหากคุณย้ายพาร์ติชั่นข้อมูล mysql ไปยังตำแหน่งที่ไม่เป็นมาตรฐาน ฉันย้ายของฉันจาก/var/lib/mysql/dataไปยังไดรฟ์อื่นผ่าน symlink จากนั้นคุณอาจต้องลบลิงก์สัญลักษณ์ชั่วคราวก่อนการpostinstจัดการสคริปต์ จากนั้นสร้างใหม่อีกครั้งหลังจากรันการอัพเกรดแพ็คเกจ

หลังจากการอัพเกรดรุ่นต่อไปของแพคเกจ mysqld debian ปัญหานี้กับ/var/lib/dpkg/info/mysql-server-5.7.postinstสคริปต์สามารถแสดงขึ้นอีกครั้ง


ฉันสิ้นสุดการล้างข้อมูลทุกอย่างแล้วดาวน์โหลดเวอร์ชั่นชุมชน mysql-server และติดตั้งด้วยตนเองจากที่นี่: dev.mysql.com/downloads/mysql
RyanNerd

สิ่งเดียวกันนั้นเกิดขึ้นกับฉันและขั้นตอนของคุณก็แก้ไขได้ Bur สำหรับฉันการโทร mysql_upgrade ของฉันอยู่ที่บรรทัดที่ 320 คุณช่วยอธิบายได้หรือไม่ว่าทำไมมันถึงส่งกลับค่าที่ไม่เป็นศูนย์เมื่อถูกเรียกจากสคริปต์ postinst
emiliopedrollo

@emiliopedrollo ไม่ฉันไม่สามารถอธิบายได้ที่นี่ แต่ฉันคิดว่าหมายเลขโทรศัพท์ตอนนี้คือ 320 เพราะเมื่อเร็ว ๆ นี้ผู้ดูแลแพคเกจได้เพิ่มสคริปต์การติดตั้งเพิ่มเติมฉันได้สังเกตสิ่งเดียวกันในวันอื่น ๆ ในระหว่างการรันครั้งล่าสุดของซอฟต์แวร์อัพเดท (ซึ่งรวมถึงแพ็คเกจ mysql-deb-ใหม่) .
knb

ขอบคุณ! เมื่อset -eฉันสามารถแก้ไขปัญหาที่แน่นอนได้ - MySQL ไม่สามารถเข้าถึงผู้ใช้ระบบ Ubuntu ที่ระบุไว้/etc/mysql/debian.cnf ได้ ดังนั้นฉันจึงเพิ่มผู้ใช้นี้ไปยัง MySQL และได้รับสิทธิ์วิ่งdpkgอีกครั้งและมันก็ใช้ได้!
อัลเลนแฮมิลตัน

17

คำแนะนำที่นี่แก้ไขในเซิร์ฟเวอร์ของฉัน: https://bugs.mysql.com/bug.php?id=72722

ฉันสามารถเข้าใจความเจ็บปวดของการมีระบบของคุณในสถานะที่ไม่สอดคล้องกัน แต่ช่วยให้ไม่ต้องกังวลเกี่ยวกับสถานการณ์ทั้งหมดและทำตามขั้นตอนเพื่อให้ระบบสะอาด

ก่อนอื่นให้ดูสถานะปัจจุบันของแพ็คเกจ mysql ทั้งหมดบนเครื่องโดยใช้: dpkg -l | grep mysql (โปรดวางผลลัพธ์ไม่รวมคอลัมน์สุดท้าย)

คอลัมน์แรกแสดงสถานะปัจจุบันของแพ็คเกจ ตัวเลือกที่เป็นไปได้มีดังนี้:

ii) rc ที่ติดตั้งแล้ว) เอาไฟล์ปรับแต่งที่เก็บไว้ออก (ซึ่งควรเป็นสถานะของแพ็คเกจทั้งหมดที่คุณลบด้วย 'apt-get remove' ที่ไม่ได้ลบไฟล์ config ภายใต้ / etc)

เพื่อให้ทำงานได้คุณจะต้องเรียกใช้ 'apt-get purge <pkg-name>' จนกว่าคุณจะไม่เห็นแพ็คเกจใด ๆ ในรายการด้านบน

โปรดจำไว้ว่าแพ็คเกจที่ไม่ใช่ mysql-server เช่น python-mysql.connector และ python-mysqldb หากติดตั้งไว้ไม่จำเป็นต้องลบออกเนื่องจากไม่มีผลกระทบใด ๆ ต่อสถานการณ์นี้ แต่ถ้าลบออกอาจทำให้เกิดปัญหากับแอปพลิเคชันที่ใช้งาน

เราจะพยายามเยี่ยมชมเอกสารของเราอีกครั้งเพื่อดูว่าเราจะป้องกันผู้ใช้จากปัญหานี้ได้อย่างไร ขอขอบคุณที่แบ่งปันข้อเสนอแนะของคุณกับเรา


2
dpkg -l | grep mysql ขอบคุณสำหรับ มันช่วยให้เข้าใจทิศทาง
Max Yudin

คำสั่งไม่ถูกต้องสำหรับการลบมันจะต้องsudo apt-get purge <pkg-name>แก้ไขด้วยการแก้ไข แต่: ฉันใช้อักขระ unicode สำหรับ<เพราะมิฉะนั้นมันจะไม่แสดง ถูกเตือนให้คัดลอกวางคำสั่งนี้
Toskan

3

ในกรณีของฉันด้วย strace ฉันเห็นว่า / var / run / mysqld / ไม่มีอยู่และ mysqld ไม่สามารถสร้างไฟล์ mysqld.sock

คำสั่งเหล่านี้แก้ปัญหาของฉันได้:

mkdir /var/run/mysqld
chown mysql.mysql /var/run/mysqld
chmod 700 /var/run/mysqld

ขณะนี้:

systemctl start mysql

และ mysql ก็ทำงานได้อีกครั้ง :)


ฉันขอแนะนำให้คุณเพิ่มบรรทัดเหล่านี้ใน / usr / share / mysql / mysql-systemd- เริ่มต้นที่บรรทัดที่ 25 จากนั้นคุณจะไม่ต้องสร้างไดเรกทอรีนี้ใหม่หลังจากรีบูตทุกครั้ง (ขออภัยบรรทัดกลับไม่ทำงานในความคิดเห็นนี้) : ถ้า [! -d / run / msyqld]; จากนั้น mkdir -p -m0755 / run / mysqld || {echo "ไม่สามารถสร้าง / รัน / mysqld"; ทางออก 1; } chown mysql: mysql / run / mysqld || {echo "ไม่สามารถ chown / run / mysqld"; ทางออก 1; } fi
scoobydoo

3

ในกรณีของฉันฉันสามารถแก้ไขปัญหาด้วยการเพิ่ม

# Allow log file access
/home/system/var/log/mysql.err rw,
/home/system/var/log/mysql.log rw,
/home/system/var/log/mysql/ r,
/home/system/var/log/mysql/** rw,

ไปยัง /etc/apparmor.d/local/usr.sbin.mysqld

สำหรับรายละเอียดเพิ่มเติมลองดูคำตอบของฉัน(โดย ChristophS) ที่ stackoverflow


0

ฉันมีปัญหาเดียวกัน ฉันพยายามติดตั้ง mysql ใหม่หลายครั้ง แต่ก็ไม่ประสบความสำเร็จ

ฉันคิดว่าปัญหาสำหรับฉันก็คือว่ากระบวนการ mysql อื่นกำลังทำงานอยู่

ในรายละเอียด:

หลังจากที่ฉันอ่านอย่างละเอียดเข้าสู่ระบบ/var/log/mysql/error.logและพบว่า:

[ข้อผิดพลาด] ไม่สามารถเริ่มเซิร์ฟเวอร์: ผูกบนพอร์ต TCP / IP: มีการใช้ที่อยู่แล้ว

[ข้อผิดพลาด] คุณมีเซิร์ฟเวอร์ mysqld อื่นที่ใช้งานพอร์ต: 3306 อยู่แล้วหรือไม่?

ดูเหมือนว่าแอปพลิเคชันอื่นที่ใช้พอร์ตอยู่แล้ว

ฉันตรวจสอบโดยใช้ps -aux | grep 3306:

$ ps -aux | grep 3306
milkovs+  6802  0.0  0.0  16336  1084 pts/19   S+   21:39   0:00 grep --color=auto 3306
mysql    14706  0.0  0.3 1270192 13916 pts/2   Sl   Aug19   0:29 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib/mysql/plugin --user=mysql --skip-grant-tables --log-error=/var/log/mysql/error.log --pid-file=/var/run/mysqld/mysqld.pid --socket=/var/run/mysqld/mysqld.sock --port=3306 --log-syslog=1 --log-syslog-facility=daemon --log-syslog-tag=

และฉันฆ่ากระบวนการทำงาน sudo kill -15 14706

จากนั้นฉันก็เริ่ม mysql: /etc/init.d/mysql start

ในที่สุด mysql ก็ใช้งานได้สำหรับฉัน! ฉันหวังว่ามันจะช่วยให้ใครบางคน


0

ไม่มีคำตอบในหน้านี้สำหรับฉัน

ฉันสิ้นสุดขึ้นไปที่ออราเคิลหน้าดาวน์โหลดดาวน์โหลดmysql-apt-config_0.8.8-1_all.debและติดตั้ง MySQL จาก Oracle repo:

sudo dpkg -i mysql-apt-config_0.8.8-1_all.deb
sudo apt update
sudo apt install mysql-server

2
isntall-> installพิมพ์ผิด Stupid SO ไม่อนุญาตให้ฉันแก้ไขตัวละครตัวเดียว
Csaba Toth

ทำไมคุณถึงไปที่ oracle เพื่อดาวน์โหลด mysql
Sinscary

@Sinscary คำตอบนี้มาจากอีกสักครู่ แต่อาจเป็นเพราะพวกเขามีเวอร์ชั่นใหม่กว่าตัวจัดการแพ็คเกจระบบ?
ostrokach

0

ฉันมีปัญหาเกี่ยวกับเซิร์ฟเวอร์ไม่กี่ตอนนี้การแก้ไขคือการเรียกใช้ apt ติดตั้ง phpmyadmin - ติดตั้งใหม่

ซึ่งแก้ไขข้างต้น (ไม่จำเป็นต้องสัมผัส mysql ภายหลัง)

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