Nâng cấp 16.04 đã phá vỡ máy chủ mysql


127

Quá trình nâng cấp tổng thể của tôi đã diễn ra tốt đẹp, nhưng tôi gặp phải vấn đề nghiêm trọng là máy chủ mysql không thể tự cài đặt và không có gì tôi đang cố gắng để nó hoạt động.

Đây là lỗi tôi thấy khi cố gắng cài đặt / cài đặt lại:

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)

Tôi đã cố gắng loại bỏ nó hoàn toàn, mặc dù vậy, cố gắng cài đặt MariaDB vì phụ thuộc (?). Bất kỳ đề xuất về những gì tôi có thể làm để khắc phục điều này sẽ được hoan nghênh nhất.

EDIT: Có vẻ như tôi không phải là người duy nhất: https://bugs.launchpad.net/ubfox/+source/mysql-5.7/+orms/1573279


Tôi có vấn đề tương tự ở đây .
KernelPanic

1
Phải gỡ cài đặt phpmyadmin, điều này gây ra vấn đề phụ thuộc bằng cách nào đó. Sau khi cài đặt lại, mọi thứ hoạt động tốt trở lại.
Hinrich

1
do-phát hành-nâng cấp từ Ubuntu 14 lên 16 thực hiện nâng cấp không được hỗ trợ từ MySQL 5.5 lên 5.7, do đó, dự kiến ​​MySQL sẽ bị hỏng sau, như đã báo cáo ở đây: bug.launchpad.net/ubfox/+source/ubfox-release-upgrader/ + lỗi /
Lôi

1
@MarcoMarsala Tôi không biết nếu chúng ta có thể nói nó được dự kiến cho MySQL để bị phá vỡ sau khi nâng cấp Ubuntu 14 đến 16, mặc dù tôi cho rằng nó phụ thuộc vào quan điểm của bạn. Đối với người dùng trung bình, chắc chắn sẽ không có một bản nâng cấp LTS nào phá vỡ thứ gì đó như MySQL. Điều đáng ngạc nhiên là đã không bị bắt trong khi thử nghiệm, mặc dù.
TheGremlyn

apt cài đặt phpmyadmin - cài đặt đã sửa lỗi ở trên mà không cần phải chạm vào mysql sau khi ... đi hình
Andy

Câu trả lời:


119

Các hướng dẫn @ andrew-beerman được đăng đang đi đúng hướng, mặc dù chúng không rõ ràng đối với tôi và dường như đề xuất nhiều hơn mức cần thiết. Tôi đã cùng nhau trả lời câu trả lời ở trên và một bài viết hữu ích trong chuỗi lỗi.

Đây là các bước tôi đã thực hiện để sửa lỗi này:

  1. Sao lưu của bạn my.cnf filetrong /etc/mysqlvà loại bỏ hoặc đổi tên nó

    sudo mv /etc/mysql/my.cnf /etc/mysql/my.cnf.bak
    
  2. Xóa thư mục /etc/mysql/mysql.conf.d/bằng

    sudo rm -r /etc/mysql/mysql.conf.d/
    
  3. Xác minh rằng bạn không có my.cnftệp được lưu ở nơi nào khác (tôi đã làm trong thư mục nhà của tôi!) Hoặc đang /etc/alternatives/my.cnfsử dụng

    sudo find / -name my.cnf
    
  4. Sao lưu và xóa /etc/mysql/debian.cnftệp (không chắc chắn nếu cần, nhưng chỉ trong trường hợp)

    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. Trong trường hợp nhật ký hệ thống của bạn hiển thị một lỗi như "mysqld: Không thể đọc thư mục của '/etc/mysql/conf.d/'", hãy tạo một liên kết tượng trưng:

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

    Sau đó, dịch vụ sẽ có thể bắt đầu với sudo service mysql start.

Điều đó đã làm cho nó hoạt động!


17
sau tất cả các thao tác này (tôi đã thực hiện trước đó) Tôi vẫn gặp vấn đề tương tự ...
Serge

5
Bạn phải xóa mọi my.cnf. * Khỏi thư mục / etc / mysql. Hãy tìm my.cnf.backup, my.cnf.fallback và my.cnf.migrated - tất cả các tệp này cũng phải được xóa (sao lưu trước!)
hitzi

8
@SergiiP sudo find / -name "my.cnf"có thể có ích.
starbeamrainbowlabs

1
mysql-server-core- phải là mysql-server-core-5.7. Nếu không thì làm việc như một lá bùa. Cảm ơn bạn!
David Tây

1
+1. Bạn đã làm cho ngày của tôi! Cũng sáng và tối! Tôi đã bị mắc kẹt.
Max Yudin

56

Hôm nay tôi gặp vấn đề tương tự, sau khi thử nhiều giải pháp tôi thấy rằng vấn đề là lệnh sudo systemctl disable mysql.servicetôi đã sử dụng để vô hiệu hóa tự động MySQL, vì vậy để nó hoạt động, tôi kích hoạt lại máy chủ MySQL bằng lệnh sudo systemctl enable mysql.servicevà chạy lại quá trình nâng cấp và nó chấm dứt hoàn hảo.


5
Tôi gặp phải vấn đề tương tự và cách khắc phục tương tự đã có hiệu quả với tôi.
Allen

5
Đã làm cho tôi. Đã làm mọi giải pháp ở đây, mysql đã làm việc sau cái này.
Błażej Michalik

6
Tương tự ở đây - đây phải là bài viết hàng đầu.
a1phanumeric

3
Làm việc cho tôi quá! Cảm ơn bạn rất nhiều. Chỉ cần rõ ràng, chạy: sudo systemctl enable mysql.servicevà sau khi chạy sudo apt install -f.
Fernando Paladini

Đây là tất cả những gì tôi phải làm. Tôi đã tắt autostart như được mô tả bởi @naruto. Tôi đã bật tự động khởi động và chạy "sudo apt nâng cấp". Bây giờ đã sửa. Nên là câu trả lời hàng đầu. Đây là một giải pháp đơn giản hơn, tiêu chuẩn hơn và ít gặp rắc rối hơn.
Jack Holt

20

Thông báo lỗi của bạn chứa dòng này:

subprocess installed post-installation script returned error exit status 1

Tuy nhiên, điều này installed post-installation scriptkhông được đề cập theo tên. Sau nhiều lần mày mò, tôi phát hiện ra rằng tên của nó là (trong trường hợp của tôi) /var/lib/dpkg/info/mysql-server-5.7.postinst.

Mở tệp này với sudo vi /var/lib/dpkg/info/mysql-server-5.7.postinsthoặc trình soạn thảo ưa thích của bạn.

Ở trên cùng, thay đổi dòng 3 (hoặc hơn): set -eđể set -x, lưu tệp. (tùy chọn -elà "thoát khỏi lỗi", -xcó nghĩa là "hiển thị rõ ràng lệnh được thực thi", có lẽ)

Chạy sudo dpkg --configure -a --log /tmp/dpkg.log (tùy chọn --log là tùy chọn). Bạn cũng có thể chạy đơn giản apt upgradenếu bạn biết đó sẽ là gói duy nhất sẽ được nâng cấp.

Bây giờ bạn có được đầu ra dài dòng của mysql-server-5.7.postinsttập lệnh bash và bạn có thể tìm ra điều gì sai.

Trong trường hợp của tôi, nó đã cố gắng (chạy lại) không thành công mysql_upgrade, nhưng điều đó không cần thiết cho việc cài đặt mysql tùy chỉnh của tôi. Tôi chắc chắn rằng tôi đã chạy nó bằng tay trước đó, thành công và tất cả đều tốt.

Vì vậy, tôi đã bắt đầu dòng 321 (đối với các bản phát hành mysqld cũ hơn, hãy thử dòng 281),

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

và lệnh đã thất bại trước đó, sudo apt upgrade(chạy lại), đã hoàn thành thành công và dpkg đã xóa trạng thái lỗi cho gói này.

Bây giờ bạn có thể thiết lập lại set -xthành set -e(đã đề cập ở trên). Và tùy ý bỏ qua dòng nâng cấp mysql.

Có thể cần thêm công việc nếu bạn đã di chuyển phân vùng dữ liệu mysql của mình đến một vị trí không chuẩn. Tôi đã chuyển từ /var/lib/mysql/datamột ổ đĩa khác qua symlink. Sau đó, bạn có thể phải xóa liên kết tượng trưng tạm thời, trước khi postinstthao tác tập lệnh. Sau đó tạo lại nó sau khi chạy nâng cấp gói.

Sau khi nâng cấp phiên bản nhỏ tiếp theo của gói debian mysqld, vấn đề với /var/lib/dpkg/info/mysql-server-5.7.postinsttập lệnh này có thể xuất hiện trở lại.



Chính xác điều tương tự đã xảy ra với tôi, và các bước của bạn đã giải quyết nó. Bur cho tôi cuộc gọi mysql_upTHER của tôi là trên dòng 320. Bạn có thể giải thích lý do tại sao nó trả về giá trị khác không khi được gọi từ tập lệnh postinst không?
emiliopedrollo

@emiliopedrollo Không tôi không thể giải thích ở đây. Nhưng tôi nghĩ số dòng hiện tại là 320 vì gần đây các nhà bảo trì gói đã tăng tập lệnh cài đặt sau, tôi đã quan sát điều tương tự vào ngày khác, trong lần chạy cuối cùng của trình cập nhật phần mềm (bao gồm gói mysql-deb-gói mới) .
knb

Cảm ơn! Với set -etôi đã có thể giải quyết vấn đề chính xác - MySQL không có quyền truy cập cho người dùng hệ thống Ubuntu được chỉ định trong /etc/mysql/debian.cnf . Vì vậy, tôi đã thêm người dùng này vào MySQL và được cấp đặc quyền, chạy dpkglại và nó hoạt động!
Allen Hamilton

17

Các hướng dẫn ở đây đã sửa nó trên máy chủ của tôi: https://bugs.mysql.com/orms.php?id=72722

Tôi có thể hiểu nỗi đau của việc hệ thống của bạn ở trạng thái không nhất quán nhưng không lo lắng về toàn bộ tình huống và thực hiện từng bước để làm cho hệ thống sạch sẽ.

Trước tiên, hãy xem trạng thái hiện tại của tất cả các gói mysql trên máy bằng cách sử dụng: dpkg -l | grep mysql (Vui lòng dán đầu ra không bao gồm cột cuối cùng)

Cột đầu tiên biểu thị trạng thái hiện tại của gói. Dưới đây là các tùy chọn có thể:

ii) RC đã cài đặt) Các tệp cấu hình đã bị xóa (Đây phải là trạng thái của tất cả các gói bạn đã xóa bằng 'apt-get remove' không xóa tệp cấu hình trong / etc)

Để làm việc này, bạn sẽ cần chạy 'apt-get purge <pkg-name>' cho đến khi bạn không thấy bất kỳ gói nào trong danh sách trên.

Xin nhớ rằng một số gói máy chủ không phải là mysql như python-mysql.connector và python-mysqldb, nếu được cài đặt, không cần phải gỡ bỏ vì chúng không có bất kỳ ảnh hưởng nào đến tình huống này nhưng nếu bị xóa có thể gây rắc rối cho các ứng dụng sử dụng chúng.

Chúng tôi chắc chắn sẽ cố gắng truy cập lại tài liệu của chúng tôi để xem làm thế nào chúng tôi có thể bảo vệ người dùng khỏi rắc rối này. Cảm ơn đã chia sẻ phản hồi của bạn một cách chi tiết với chúng tôi.


2
Cảm ơn vì dpkg -l | grep mysql . Nó giúp để hiểu hướng.
Max Yudin

Lệnh đã sai khi thanh lọc, tôi phải sudo apt-get purge <pkg-name>sửa nó bằng một chỉnh sửa nhưng: Tôi đã sử dụng các ký tự unicode cho <vì nếu không nó sẽ không hiển thị. Được cảnh báo sao chép dán lệnh này
Toskan

3

Trong trường hợp của tôi, với strace, tôi thấy rằng / var / run / mysqld / không tồn tại và mysqld không thể tạo tệp mysqld.sock.

Các lệnh này đã giải quyết vấn đề của tôi:

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

Hiện nay:

systemctl start mysql

Và mysql hoạt động trở lại :)


Tôi khuyên bạn nên thêm các dòng này vào / usr / share / mysql / mysql-systemd-start bắt đầu từ dòng 25, sau đó bạn sẽ không phải tạo lại thư mục này sau mỗi lần khởi động lại (xin lỗi dòng trả về không hoạt động trong nhận xét này) : nếu như [ ! -d / chạy / msyqld]; sau đó mkdir -p -m0755 / run / mysqld || {echo "Không thể tạo / chạy / mysqld"; lối ra 1; } chown mysql: mysql / run / mysqld || {echo "Không thể chown / run / mysqld"; lối ra 1; } fi
scoobydoo

3

Trong trường hợp của tôi, tôi có thể giải quyết vấn đề bằng cách thêm

# 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,

đến /etc/apparmor.d/local/usr.sbin.mysqld

Để biết thêm chi tiết, hãy xem câu trả lời của tôi (bởi ChristophS) tại stackoverflow.


0

Tôi gặp vấn đề tương tự. Tôi đã cố gắng cài đặt lại mysql nhiều lần, nhưng không thành công.

Tôi nhận ra rằng vấn đề đối với tôi là, một quy trình mysql khác đã chạy.

Chi tiết:

Sau khi tôi đọc kỹ đăng nhập /var/log/mysql/error.logvà tìm thấy:

[ERROR] Không thể khởi động máy chủ: Liên kết trên cổng TCP / IP: Địa chỉ đã được sử dụng

[ERROR] Bạn đã có máy chủ mysqld khác đang chạy trên cổng: 3306 chưa?

Có vẻ như một ứng dụng khác đã sử dụng cổng.

Tôi đã kiểm tra nó bằng cách sử dụng 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=

Và tôi đã giết quá trình chạy sudo kill -15 14706

Sau đó, tôi bắt đầu mysql: /etc/init.d/mysql start

Cuối cùng mysql làm việc cho tôi! Tôi hy vọng nó sẽ giúp được ai đó.


0

Không có câu trả lời trên trang này làm việc cho tôi.

Cuối cùng tôi đã đi đến trang tải xuống của Oracle , tải xuống mysql-apt-config_0.8.8-1_all.debvà cài đặt MySQL từ repo của Oracle:

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

2
isntall-> installlỗi đánh máy. SO ngu ngốc không cho phép tôi sửa một ký tự.
Csaba Toth

Tại sao bạn lại đi đến nhà tiên tri để tải xuống mysql
Sinscary

@Sinscary Câu trả lời này là từ một lúc trước, nhưng có lẽ vì họ có phiên bản mới hơn trình quản lý gói hệ thống?
Ostrokach

0

Tôi đã gặp sự cố trên một vài máy chủ. Cách khắc phục là chạy apt install phpmyadmin --reinstall

đã giải quyết vấn đề trên (không cần phải chạm vào mysql sau đó)

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.