การติดตั้ง MariaDB เมื่อรายงาน Apt MariaDB มีการพึ่งพาหรือแพคเกจที่ไม่สมบูรณ์


9

ฉันได้ลองทุกอย่างเพื่อติดตั้ง MariaDB ในการติดตั้ง Ubuntu ที่สะอาด แต่ฉันยังคงได้รับข้อผิดพลาดนี้อยู่

Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
mariadb-server : Depends: mariadb-server-5.5 (= 5.5.33a+maria-1~saucy) 
but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

ฉันได้ทำตามคำแนะนำนี้เพื่อลองและติดตั้งแล้ว http://www.unixmen.com/install-lemp-server-nginx-mysql-mariadb-php-ubuntu-13-10-server/

และฉันได้ปฏิบัติตามคำแนะนำ "ทางการ" ในหน้าดาวน์โหลด MariaDB สำหรับ 13.10 https://downloads.mariadb.org/mariadb/repositories/

แต่ดูเหมือนว่าจะไม่มีอะไรทำงาน

แก้ไข 1

ฉันลองทั้งสองแล้วฉันจะแก้ไขการพึ่งพาที่ไม่ได้รับหลังจากเพิ่ม PPA ได้อย่างไร และวิธีการติดตั้ง MariaDB? แต่มันก็ทำให้ฉันมีข้อผิดพลาดที่ฉันโพสต์ข้างต้น

มันคือการติดตั้ง Ubuntu ใหม่พร้อมแทบจะติดตั้งอะไรก็ตาม

แก้ไข 2

กล่องกาเครื่องหมายทั้งหมดเป็นตั๋วในการปรับปรุง ฉันวิ่ง:

sudo apt-get update && sudo apt-get -f install mariadb-server-5.5"=5.5.33a+maria-1~saucy"

และมันทำให้ฉันมีข้อผิดพลาดนี้:

The following packages have unmet dependencies:
mariadb-server-5.5 : Depends: mariadb-client-5.5 (>= 5.5.33a+maria-1~saucy) 
but it is not going to be installed
Depends: mariadb-server-core-5.5 (>= 5.5.33a+maria-1~saucy) 
but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

เรียกใช้คำสั่งนี้เมื่อการติดตั้งแพคเกจจดทะเบียน: sudo apt-get update && sudo apt-get -f install mariadb-server-5.5"=5.5.33a+maria-1~saucy"ตรวจสอบให้แน่ใจว่าคุณได้ ticked ทุกช่องภายใต้การปรับปรุงแท็บในแหล่งที่มาของซอฟแวร์ ในการตรวจสอบว่ารัน: sudo software-properties-gtkเพื่อเปิดแหล่งซอฟแวร์ หากคุณได้รับข้อผิดพลาด / ข้อความในคำสั่งที่ฉันได้กล่าวไว้ข้างต้นโพสต์ไว้ในคำถามของคุณ
Saurav Kumar

ดูเหมือนว่าคุณกำลังจะแก้ปัญหาของคุณในไม่ช้า เคล็ดลับหลักคือคุณจะต้องแสดงรายการแพ็คเกจที่จำเป็นทั้งหมดในบรรทัดเดียวเพื่อติดตั้ง ตัวอย่างเช่นจากผลลัพธ์ใหม่ของคุณที่คุณต้องดำเนินการ: ตรวจsudo apt-get -f install mariadb-server-5.5"=5.5.33a+maria-1~saucy mariadb-client-5.5"=5.5.33a+maria-1~saucy" mariadb-server-core-5.5"=5.5.33a+maria-1~saucy" จับรูปแบบสิ่งที่ฉันกำลังทำอยู่ดังนั้นหากคุณได้รับแพ็คเกจเพิ่มเติมเพื่อติดตั้ง ฉันรู้ว่ามันจะยาก แต่หวังว่าจะช่วยคุณได้ ตอบ.
Saurav Kumar

ขวาฉันจัดการเพื่อติดตั้ง mariadb-common และพยายามติดตั้ง libmariadbclient18 ซึ่งขึ้นอยู่กับ libmysqlclient18 แต่มันบอกว่าฉันมี libmysqlclient18 แล้วเช่นเดียวกันกับ libdbd-mysql-perl
Andreas

@Ecaz คุณพบวิธีแก้ปัญหาของคุณแล้วหรือยัง? ฉันกำลังประสบกับสิ่งเดียวกัน
Jon Koops

ฉันได้รับข้อผิดพลาดนี้:libmariadbclient18 : Depends: libmysqlclient18 (= 5.5.33a+maria-1~saucy) but 5.5.34-0ubuntu0.13.10.1 is to be installed
Jon Koops

คำตอบ:


16

ดูเวอร์ชั่นไม่ตรงกันระหว่าง Mariadb และ Ubuntu Debian Repositories

มันหายากสำหรับหมายเลขรุ่นของ mysql-common หรือ libmysqlclient ที่จะสูงกว่าในที่เก็บ Ubuntu หรือ Debian อย่างเป็นทางการมากกว่าที่พวกเขาอยู่ในที่เก็บ MariaDB แต่มันเกิดขึ้น เมื่อใดก็ตามที่มันเป็นเพราะการแก้ไขข้อผิดพลาดที่สำคัญสำหรับข้อบกพร่องที่มีอยู่ในรุ่นของ MySQL ในที่เก็บการกระจาย แต่ที่ได้รับการแก้ไขแล้วในรุ่นของ MariaDB ในที่เก็บ MariaDB

หากสถานการณ์ตามที่อธิบายไว้ข้างต้นมีอยู่เมื่อคุณพยายามติดตั้ง MariaDB คุณจะได้รับข้อผิดพลาดดังนี้:
The following packages have unmet dependencies:
mariadb-server : Depends: mariadb-server-5.5 but it is not going to be installed
E: Unable to correct problems, you have held broken packages.
วิธีแก้ไขปัญหานี้คือการระบุรุ่นที่แน่นอนของสองแพ็คเกจที่คุณต้องการติดตั้ง เมื่อต้องการทำเช่นนี้ก่อนกำหนดหมายเลขเวอร์ชันเต็มของแพคเกจที่ได้รับผลกระทบ วิธีง่ายๆในการทำเช่นนี้คือ 'apt-cache show':
apt-cache show mysql-common | grep Version
apt-cache show libmysqlclient18 | grep Version

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

Version: 5.5.34-0ubuntu0.13.10.1
Version: 5.5.34+maria-1~saucy

หน้า MariaDB มอบโซลูชั่นสองวิธี

วิธีแก้ปัญหาแรก: การระบุรุ่นของแพ็คเกจ

สำหรับแต่ละข้อด้านบนคุณจะได้รับรายการเวอร์ชัน สิ่งที่อยู่ในที่เก็บ MariaDB จะมี "mariadb" ในสตริงรุ่นและเป็นสิ่งที่คุณต้องการ ด้วยหมายเลขรุ่นในมือคุณจะสามารถติดตั้ง MariaDB ได้โดยระบุหมายเลขรุ่นอย่างชัดเจนดังนี้:
apt-get install mariadb-server-5.5 mariadb-client-5.5 \
libmysqlclient18=<version-number> \
mysql-common=<version-number>

ซึ่งเป็น

apt-get install mariadb-server-5.5 mariadb-client-5.5 \
 libmysqlclient18=5.5.34+maria-1~saucy \
 mysql-common=5.5.34+maria-1~saucy

หมายเหตุ: อัปเดตเป็น 5.5.34 เพื่อให้สะท้อนถึงเวอร์ชั่นปัจจุบัน ณ 2014.01.28 [RealPariah] หลังจากการติดตั้งคุณจะต้องถือแพคเกจจนกว่าหมายเลขเวอร์ชั่นจะกลับมาซิงค์กัน

หลังจากติดตั้ง MariaDB แล้วและตราบใดที่ปัญหาหมายเลขรุ่นมีอยู่ `apt-get dist-upgrade 'จะพยายามลบ MariaDB เพื่อติดตั้ง" อัพเกรด "libmysqlclient และแพ็คเกจทั่วไป mysql เพื่อป้องกันไม่ให้เกิดเหตุการณ์เช่นนี้คุณสามารถเก็บไว้ได้เพื่อที่ apt จะไม่พยายามอัปเกรด ในการทำเช่นนั้นให้เปิดเทอร์มินัลกลายเป็นรูทด้วย 'sudo -s` แล้วป้อนสิ่งต่อไปนี้:
echo libmysqlclient18 hold | dpkg --set-selections
echo mysql-common hold | dpkg --set-selections
การพักจะป้องกันคุณจากการอัพเกรด MariaDB ดังนั้นเมื่อคุณต้องการลบการพักเปิดเทอร์มินัลกลายเป็นรูทด้วย 'sudo -s' แล้วป้อนสิ่งต่อไปนี้:
echo libmysqlclient18 install | dpkg --set-selections
echo mysql-common install | dpkg --set-selections
จากนั้นคุณจะสามารถอัปเกรด MariaDB ได้ตามปกติ (เช่นด้วย `sudo apt-get update; sudo apt-get upgrade`)

ฉันจะรู้ได้อย่างไรว่าหมายเลขเวอร์ชันตรงกันอีกครั้งเมื่อใด

คุณสามารถติดตามหมายเลขรุ่น MariaDB โดยการลงทะเบียนสำหรับการแจ้งเตือนอีเมลของรุ่นใหม่ที่MariaDB.org low-traffic announce-only listตามเว็บไซต์ก็เป็น

นอกจากนี้เมื่อเวอร์ชันแพคเกจตรงกันอีกครั้งคุณควรหยุดเห็นข้อความโดยบอกว่าจะมีเพียง 2 แพ็คเกจที่จัดขึ้น แต่แพคเกจ mariadb ทั้งหมดจะถูกเก็บไว้:

The following packages have been kept back:
libmariadbclient18 libmysqlclient18 linux-generic linux-headers-generic
linux-image-generic mariadb-client-5.5 mariadb-client-core-5.5
mariadb-server mariadb-server-5.5 mariadb-server-core-5.5 mysql-common

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

วิธีที่สอง: การปักหมุดที่เก็บ MariaDB

อีกสิ่งที่คุณสามารถทำได้คือการปักหมุดที่เก็บ MariaDB ที่คุณใช้ สิ่งนี้ทำได้โดยการสร้างไฟล์ภายใต้ `/ etc / apt / preferences.d /` โดยมีเนื้อหาดังต่อไปนี้:
Package: *
Pin: origin <mirror-domain>
Pin-Priority: 1000

แทนที่<mirror-domain>ด้วยชื่อโดเมนของ MariaDB มิเรอร์ที่คุณใช้ ตัวอย่างเช่นftp.osuosl.org. เมื่อใช้ไฟล์พินแพคเกจจากที่เก็บ MariaDB ของคุณจะมีลำดับความสำคัญสูงกว่าแพ็กเกจจากที่เก็บระบบ

คุณสามารถค้นหาชื่อกระจกที่คุณใช้ในการตั้งค่าระบบ >> ซอฟแวร์และการปรับปรุงหรือถ้าคุณกำลังใช้รสชาติของอูบุนตูอีกSynaptic >> การตั้งค่า >> เก็บcat /etc/apt/sources.listหรือ

Pin-Priorityในกรณีนี้จะต้องมากกว่าหรือเท่ากับ 1000 ซึ่งcauses a version to be installed even if this constitutes a downgrade of the package

(ดูman 5 apt_preferencesข้อมูลเพิ่มเติมเกี่ยวกับตัวเลือกในกรณีอื่น ๆ )

การตั้งชื่อไฟล์กำหนดลักษณะการปัก

Note that the file in the /etc/apt/preferences.d directory are parsed in alphanumeric ascending order and need to obey the following naming convention:

The files have either no or "pref" as filename extension and only contain alphanumeric, hyphen (-), undescore (_), and period (.) characters. Otherwise APT will print a notice that it has ignored a file...

(ที่มา: man 5 apt_preferences)

ดังนั้นชื่อตัวเองไม่สำคัญ 50_mariadbแต่ชื่อที่ดีจะเป็นสิ่งที่ชอบ สิ่งนี้ระบุถึงแพคเกจที่เกี่ยวข้องและอนุญาตให้วางไฟล์การกำหนดค่าตามความชอบอื่น ๆ ไว้ก่อนหน้าหลังไฟล์นี้ในลำดับการประมวลผล


ฉันจะลองวิธีแก้ปัญหาแรก แต่คุณจะรู้ได้อย่างไรว่ามีการแก้ไขไม่ตรงกันเมื่อใด ฉันต้องกลั้วบันทึกการเปลี่ยนแปลงทุกครั้งที่พวกเขาปล่อยการปรับปรุงหรือไม่
Andreas

ฉันใช้วิธีแรกและมันราบรื่นมาก ไม่ต้องกังวลกับการพึ่งพาเลย ฉันแก้ไขคำตอบพร้อมข้อมูลเกี่ยวกับหมายเลขเวอร์ชันมา
เรียบ

ชื่อของไฟล์ปักหมุดควรเป็นชื่ออะไรสำหรับวิธีที่สอง?
โทมัสเทย์เลอร์

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

1
@ thomas-taylor เพิ่มข้อมูลในการตั้งชื่อไฟล์ปักหมุด
ช่วงเวลา

2

ฉันมีปัญหาคล้ายกันใน Ubuntu 14.10 ที่อัพเกรดจาก MySQL เป็น Maria DB คือฉันจะติดกับ

 libmysqlclient18:amd64 10.0.16+maria-1~utopic (Multi-Arch: no) is not co-installable with libmysqlclient18 which has multiple installed instances

หลังจากทำตามคำแนะนำเหล่านี้เพื่อประโยชน์ไม่ได้ต่อไปนี้ช่วยฉันอย่างมาก: วิธีการแทนที่ MySQL ด้วย MariaDB ในเซิร์ฟเวอร์ Ubuntuโดย JournalXtra

การแก้ไข / var / lib / dpkg / status และลบสองอินสแตนซ์ของ libmysqlclient18 ดังนี้:

Package: libmysqlclient18
Status: deinstall ok config-files
Priority: optional
Section: libs
Installed-Size: 3392
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Architecture: i386
Multi-Arch: same
Source: mysql-5.5
Version: 5.5.40-0ubuntu1
Config-Version: 5.5.40-0ubuntu1
Depends: mysql-common (>= 5.5.40-0ubuntu1), libc6 (>= 2.4), libgcc1 (>= 1:4.1.1), zlib1g (>= 1:1.1.4)
Pre-Depends: multiarch-support
Description: MySQL database client library

MySQL เป็นเซิร์ฟเวอร์ฐานข้อมูล SQL แบบมัลติเธรดที่รวดเร็วเชื่อถือได้และมีหลายเธรด SQL (Structured Query Language) เป็นภาษาสืบค้นฐานข้อมูลที่ได้รับความนิยมมากที่สุดในโลก เป้าหมายหลักของ MySQL คือความเร็วความทนทานและความสะดวกในการใช้งาน . แพ็คเกจนี้รวมถึงห้องสมุดลูกค้า โฮมเพจ: http://dev.mysql.com/ ผู้ดูแลดั้งเดิม: Debian MySQL Maintainers

อนุญาตให้ฉันติดตั้ง MariaDB ได้อย่างราบรื่นหลังจากนั้น

sudo apt-get install mariadb-server

หมายเหตุ : ฉันมาที่นี่หลังจากพยายามกำจัด libmariadbclient18 และ libmysqlclient18 นี้ก่อนที่วิธีนี้จะใช้ได้ ฉันไม่สามารถรับปัญหา apt-get ที่ผ่านมาได้จนกว่าทั้งสองจะถูกลบออกเนื่องจากมีรายงานว่าเป็นแพ็กเกจที่ใช้งานไม่ได้ก่อนที่ฉันจะลองซ่อมแซมอื่น ๆ

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