नहीं, जब आपके पास बाइनरी ब्लॉब्स हों तो यह हमेशा विश्वसनीय नहीं होता है। उस स्थिति में आपको "--hex-blob . का उपयोग करना होगा " सही परिणाम प्राप्त करने के लिए ध्वजांकित करें।
नीचे टिप्पणी से चेतावनी:
मेरे पास एक ऐसा मामला है जहां ये कॉल विफल हो जाते हैं (एक अलग सर्वर पर आयात करना लेकिन दोनों Centos6/MariaDB 10 चल रहे हैं):
mysqldump --single-transaction --routines --databases myalarm -uroot -p"PASSWORD" | gzip > /FILENAME.sql.gz
gunzip < FILENAME.sql.gz | mysql -p"PASSWORD" -uroot --comments
यह एक फाइल तैयार करता है जो चुपचाप आयात करने में विफल रहता है। "-स्किप-विस्तारित-सम्मिलित करें" जोड़ने से मुझे एक फ़ाइल मिलती है जो डीबग करना बहुत आसान है, और मुझे लगता है कि यह लाइन जेनरेट की गई है लेकिन पढ़ा नहीं जा सकता है (लेकिन निर्यात या आयात करने में कोई त्रुटि रिपोर्ट नहीं की गई है):
INSERT INTO `panels` VALUES (1003,1,257126,141,6562,1,88891,'??\\\?ŖeV???,NULL);
ध्यान दें कि बाइनरी डेटा पर टर्मिनेटिंग कोट मूल में मौजूद नहीं है।
select hex(packet_key) from panels where id=1003;
--> DE77CF5C075CE002C596176556AAF9ED
कॉलम बाइनरी डेटा है:
CREATE TABLE `panels` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`enabled` tinyint(1) NOT NULL DEFAULT '1',
`serial_number` int(10) unsigned NOT NULL,
`panel_types_id` int(11) NOT NULL,
`all_panels_id` int(11) NOT NULL,
`installers_id` int(11) DEFAULT NULL,
`users_id` int(11) DEFAULT NULL,
`packet_key` binary(16) NOT NULL,
`user_deleted` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`),
...
तो नहीं, न केवल आप जरूरी नहीं कि mysqldump पर भरोसा कर सकते हैं, जब कोई त्रुटि होती है तो आप उस पर भरोसा भी नहीं कर सकते हैं।
मेरे द्वारा उपयोग किया जाने वाला एक बदसूरत कामकाज डंप में इस तरह के विकल्पों को जोड़कर दो पीड़ित तालिकाओं को छोड़कर mysqldump था:
--ignore-table=myalarm.panels
फिर यह BASH स्क्रिप्ट हैक। मूल रूप से एक चयन चलाएं जो INSERT मान उत्पन्न करता है जहां नल कॉलम संभाले जाते हैं और बाइनरी कॉलम यूएनएचईएक्स() कॉल में बदल जाता है:
(123,45678,UNHEX("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA"),"2014-03-17 00:00:00",NULL),
जरूरत पड़ने पर इसके साथ खेलने के लिए इसे अपने पसंद के संपादक में पेस्ट करें।
echo "SET UNIQUE_CHECKS=0;SET FOREIGN_KEY_CHECKS=0;DELETE FROM panels;INSERT INTO panels VALUES " > all.sql
mysql -uroot -p"PASSWORD" databasename -e "SELECT CONCAT('(',id,',', enabled,',', serial_number,',', panel_types_id,',', all_panels_id,',', IFNULL(CONVERT(installers_id,CHAR(20)),'NULL'),',', IFNULL(CONVERT(users_id,CHAR(20)),'NULL'), ',UNHEX(\"',HEX(packet_key),'\"),', IF(ISNULL(user_deleted),'NULL',CONCAT('\"', user_deleted,'\"')),'),') FROM panels" >> all.sql
echo "SET UNIQUE_CHECKS=1;SET FOREIGN_KEY_CHECKS=1;" > all.sql
यह मुझे "all.sql" नामक एक फ़ाइल देता है जिसे INSERT में अंतिम अल्पविराम की आवश्यकता होती है, जिसे अर्धविराम में बदल दिया जाता है, फिर इसे ऊपर के रूप में चलाया जा सकता है। मुझे उस फ़ाइल को संसाधित करने के लिए इंटरएक्टिव mysql शेल और कमांड लाइन दोनों में "बड़े आयात बफर" सेट की आवश्यकता थी क्योंकि यह बड़ी है।
mysql ... --max_allowed_packet=1GB
जब मैंने बग की सूचना दी तो मुझे अंततः "--हेक्स-ब्लॉब" ध्वज की ओर इशारा किया गया, जो मेरे कामकाज के समान ही है लेकिन मेरी तरफ से एक छोटा सा है। उस विकल्प को जोड़ें, बूँदें हेक्स, अंत के रूप में डंप हो जाती हैं।