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