गुरुवार, 12 नवंबर 2020

स्कीमा पाने के लिए अपनी FRM फ़ाइल का उपयोग करना और फिर आईडीबी फ़ाइलों को दोबारा करना ..

 यह एक ऐसा विषय है जो कुल मिलाकर आपको कभी नहीं करना चाहिए ... क्यों? क्योंकि आपने बैकअप सही बनाया है ... आपने परीक्षण किया है और बैकअप का काम जानते हैं इसलिए आप बस उन बैकअप को सुरक्षित कर सकते हैं और अपना खोया हुआ स्कीमा और संबंधित डेटा प्राप्त कर सकते हैं ... 

हालाँकि उस कोने के कार्यालय में एक उदाहरण .. आपको स्थापित करने के लिए कभी नहीं मिला .. यह महत्वपूर्ण नहीं है ... बस दुर्घटनाग्रस्त हो गया है और अब आपको एहसास हुआ कि आप वास्तव में इसका उपयोग कैसे करते हैं ... 

सब कुछ खोया नहीं है ।।  

MySQL ने अपनी MySQL उपयोग सूची को थोड़ा देर बाद जारी किया और चूंकि MySQL शेल के साथ इसे और अधिक बदल दिया गया।  

mysqlfrm अभी भी बहुत आसान है, जब एक त्वरित और सरलैंड में FRM फ़ाइल से स्कीमा को बाहर निकालने की आवश्यकता होती है और यह एक साधारण इंस्टॉल है। 

mysqlfrm --diagnostic city.frm
# WARNING: Cannot generate character set or collation names without the --server option. # CAUTION: The diagnostic mode is a best-effort parse of the .frm file. As such, it may not identify all of the components of the table correctly. This is especially true for damaged files. It will also not read the default values for the columns and the resulting statement may not be syntactically correct.
# Reading .frm file for city.frm:
# The .frm file is a TABLE.
# CREATE TABLE Statement:

CREATE TABLE `city` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `Name` char(160) DEFAULT NULL,
  `CountryCode` char(12) NOT NULL,
  `District` char(80) NOT NULL,
  `Population` int(11) NOT NULL,
PRIMARY KEY `PRIMARY` (`ID`),
KEY `CountryCode` (`CountryCode`),
KEY `popkey` (`Population`)
) ENGINE=InnoDB;

#...done.


इसलिए अब आपके पास जो स्कीमा है वह आप खो चुके हैं ... डीबी या टेबल का दोबारा करें। उदाहरण के लिए, मैं कहूंगा कि हमने दुनिया का डेटा डीबी से खो दिया है। 

$ cp  city.ibd  / tmp /  

$ cp city.ibd /tmp/
mysql> LOCK TABLES city WRITE;
mysql> ALTER TABLE city DISCARD TABLESPACE;

cp city.ibd /edb/local/mysql/data/rundeck/
chown tmdba:dba /edb/local/mysql/data/rundeck/city.ibd

mysql> ALTER TABLE city IMPORT TABLESPACE;
mysql> UNLOCK TABLES;
mysql> SELECT COUNT(*) FROM city;


सोमवार, 21 सितंबर 2020

MySQL mysql_config_editor और उम्मीद है

 यह किसी को भी मदद करने के लिए एक नोट है जो अपने बच्चों को 10.1 में mysql_config_editorand का उपयोग करना चाह सकता है। 

mysql_config_editor पासवर्ड तर्क नहीं लेता है, इसलिए उपकरण उपकरण जो आपके पासवर्ड को mysql_config_editor विफल करने के लिए उपयोग करने के लिए .my.cnf फ़ाइल सेट करने से पहले हो सकता है। 

यह संभव उपकरण के साथ यद्यपि संभव और काफी सरल है। 

 yum -y install expect  

यह उपयुक्त नहीं है के लिए भी काम करता है। 


इसलिए इस उदाहरण में, मैं एक सरल बैश स्क्रिप्ट संस्करण दिखाऊंगा। 

1 .. मेरा लॉगिन पथ काम नहीं करता है ... 

mysql --login-path=local

ERROR 1045 (28000): Access denied for user


यह उम्मीद के साथ सेट करें 

आप इसे अपने बैश स्क्रिप्ट के माध्यम से निष्पादित करेंगे।  

expect <<EOD

spawn mysql_config_editor set --login-path=local --host=localhost --user=root --password 

expect "password"

send  -- "<PASSWORD>\r"

interact

EOD


अब यह काम कर रहा है ...

mysql --login-path=local

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 1002

रविवार, 15 मार्च 2020

MySQL और डॉकर्स ... एक साधारण सेट अप

MySQL & Dockers ... नई अवधारणाएं नहीं हैं, लोग पिछले कुछ समय से डॉकर्स की ओर बढ़ रहे हैं। किसी ऐसे व्यक्ति के लिए, जो विकास के लिए बस आगे बढ़ रहा है, उसके लिए कुछ बाधाएँ हो सकती हैं।

जबकि MySQL स्थानीय रूप से ठीक चलने में काम करता है, यदि आप MySQL के विभिन्न संस्करणों में कोड का परीक्षण कर रहे हैं तो कई संस्करणों को आसानी से उपलब्ध होना अच्छा है।

वर्षों के लिए एक विकल्प Giuseppe Maxia द्वारा https://mysqlsandbox.net/ का रहा है। यह कई उदाहरणों को प्राप्त करने और प्रतिकृति और परीक्षण आदि को प्राप्त करने में सक्षम होने के लिए एक बहुत ही वैध समाधान है।

जब यह MySQL के विभिन्न संस्करणों में परीक्षण करने की बात आती है, तो डॉकर अब एक और अक्सर उपयोग किया जाने वाला परिदृश्य है। निम्नलिखित केवल कुछ संस्करणों को आसानी से स्थापित करने के लिए कुछ चरणों पर जाएंगे। मैं OSX का उपयोग करता हूं इसलिए ये उदाहरण OSX के लिए हैं।

आपको शुरू करने के लिए डॉकर की आवश्यकता है और निश्चित रूप से डॉकर डेस्कटॉप आपके लिए एक आसान उपकरण है जिससे आप आसानी से पहुँच प्राप्त कर सकते हैं।

एक बार जब मैंने डॉकर सेट किया तो मैं अपने वातावरण को MySQL के लिए तैयार कर सकता था।

यहाँ मैंने एक डॉकर फ़ोल्डर बनाया है जिसमें MySQL डेटा डाइरेक्टरीज़, फाइल्स फाइल के साथ-साथ mysql-files डाइरेक्टरी भी शामिल हैं अगर ज़रूरत हो।

mkdir ~/Docker ;

mkdir ~/Docker/mysql_data;
mkdir ~/Docker/mysql-files;
mkdir ~/Docker/cnf;

अब mysql_data के अंदर


cd ~/Docker/mysql_data;
mkdir 8.0;
mkdir 5.7;
mkdir 5.6;
mkdir 5.5;


अब मैंने इस उदाहरण के लिए सरल cnf फाइलें स्थापित की हैं। नोट करने के लिए प्राथमिक चीज बाइंड-एड्रेस है। यह यह सुनिश्चित करने के लिए सेट किया गया है कि यह हमारे लिए खोला गया है कि MySQL को डॉकटर के बाहर कैसे पहुँचा जाए। आप यह भी देख सकते हैं कि इन फ़ाइलों का उपयोग अतिरिक्त कॉन्फ़िगरेशन जानकारी सेट करने के लिए किया जा सकता है जैसा कि आप प्रति MySQL docker उदाहरण में फिट देखते हैं।



cd ~/Docker/cnf;

cat my.8.0.cnf
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv= /var/lib/mysql-files
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
bind-address = 0.0.0.0
port=3306
server-id=80


# Custom config should go here
!includedir /etc/mysql/conf.d/

cat my.5.7.cnf
[mysqld]
bind-address = 0.0.0.0
server-id=57
max_allowed_packet=32M

$ cat my.5.6.cnf
[mysqld]
bind-address = 0.0.0.0
server-id=56

$ cat my.5.5.cnf
[mysqld]
bind-address = 0.0.0.0
server-id=55


अब ठीक है कि हमारे पास कॉन्फ़िगरेशन फ़ाइलें सेट हैं, हमें डॉकर्स बनाने की आवश्यकता है। बिल्ड कमांड के लिए ध्यान देने योग्य कुछ बातें।

--name हमने डॉकटर के लिए एक नामांकित संदर्भ सेट किया है।

यहाँ हम विन्यास फाइल, डेटा निर्देशिका और mysql-files निर्देशिकाओं को मैप कर रहे हैं। यह हमें आसानी से my.cnf फ़ाइल और आदि को समायोजित करने की अनुमति देता है।
-v ~ / डॉकटर / cnf / my.8.0.cnf: /etc/mysql/my.cnf
-v ~ / डॉकटर / mysql_data / 8.0: / var / lib / mysql
-v ~ / Docker / mysql-files: / var / lib / mysql-files

हम डॉक के बाहर इन MySQL उदाहरणों तक पहुंचने में सक्षम होना चाहते हैं, इसलिए हमें तदनुसार पोर्ट को प्रकाशित और मैप करने की आवश्यकता है।
-पी 3306: 3306 इसका मतलब है कि डॉकटर के अंदर 3306 लोकल से 3306
-p 3307: 3306 इसका मतलब है कि dock के अंदर 3307 लोकल से 3306
-p 3308: 3306 इसका मतलब है कि 3308 लोकल डॉकटर के अंदर 3306 है
-p 3309: 3306 इसका मतलब है कि dock के अंदर 3309 लोकल से 3306

फिर हम कुछ पर्यावरण चर भी पास करते हैं।
-मे MYSQL_ROOT_HOST =% -e MYSQL_ROOT_PASSWORD = <पासवर्ड यहां सेट करें>

इसलिए यह सब एक साथ ...


docker run --restart always --name mysql8.0 -v ~/Docker/cnf/my.8.0.cnf:/etc/mysql/my.cnf -v ~/Docker/mysql_data/8.0:/var/lib/mysql -v ~/Docker/mysql-files:/var/lib/mysql-files -p 3306:3306 -d -e MYSQL_ROOT_HOST=% -e MYSQL_ROOT_PASSWORD=<set a password here> mysql:8.0

docker run --restart always --name mysql5.7 -v ~/Docker/cnf/my.5.7.cnf:/etc/mysql/my.cnf -v ~/Docker/mysql_data/5.7:/var/lib/mysql -v ~/Docker/mysql-files:/var/lib/mysql-files -p 3307:3306 -d -e MYSQL_ROOT_HOST=% -e MYSQL_ROOT_PASSWORD=<set a password here> mysql:5.7

docker run --restart always --name mysql5.6 -v ~/Docker/cnf/my.5.6.cnf:/etc/mysql/my.cnf -v ~/Docker/mysql_data/5.6:/var/lib/mysql -v ~/Docker/mysql-files:/var/lib/mysql-files -p 3308:3306 -d -e MYSQL_ROOT_HOST=% -e MYSQL_ROOT_PASSWORD=<set a password here> mysql:5.6

docker run --restart always --name mysql5.5 -v ~/Docker/cnf/my.5.5.cnf:/etc/mysql/my.cnf -v ~/Docker/mysql_data/5.5:/var/lib/mysql -v ~/Docker/mysql-files:/var/lib/mysql-files -p 3309:3306 -d -e MYSQL_ROOT_HOST=% -e MYSQL_ROOT_PASSWORD=<set a password here> mysql:5.5

उपरोक्त आदेशों के प्रत्येक निष्पादन के बाद, आपको एक आईडी वापस मिलनी चाहिए।
उदाहरण: 3cb07d7c21476fbf298648986208f3429ec664167d8eef7fed17bf9ee3ce6316

आप डॉकर डेस्कटॉप के माध्यम से प्रत्येक डॉक टर्मिनल को आसानी से शुरू कर सकते हैं / पुनः आरंभ कर सकते हैं या संबंधित आईडी का ध्यान रख सकते हैं और आप टर्मिनल के माध्यम से निष्पादित कर सकते हैं।

डॉकर डेस्कटॉप आपको उन सभी चरों को भी दिखाता है जिन्हें आपने पास किया था ताकि आप उसे सत्यापित कर सकें।
आप निश्चित रूप से यहां सीएलआई तक भी पहुंच सकते हैं, रोक सकते हैं और इसे आसानी से शुरू या नष्ट कर सकते हैं।


$ docker exec -it 3cb07d7c21476fbf298648986208f3429ec664167d8eef7fed17bf9ee3ce6316 /bin/sh; exit
# mysql -p

अगर डॉकटर कंटेनर पहले से चल रहा है, तो आप अपने लोकलहोस्ट टर्मिनल के माध्यम से MySQL तक पहुँच सकते हैं।

$ mysql --host=localhost --protocol=tcp --port=3306 -p -u root

अब यदि आपके पास कोई एक्सेस समस्या है, तो यह सुनिश्चित करने के लिए याद रखें कि MySQL खाते सही हैं और आपके पोर्ट और मैपिंग सही हैं।
  • 'प्रारंभिक संचार पैकेट पढ़ने' पर MySQL सर्वर से कनेक्शन खो गया
  • ERROR 1045 (28000): उपयोगकर्ता 'root'@'192.168.0.5' (पासवर्ड का उपयोग कर: Y:) के लिए अस्वीकृत

अब आप देख सकते हैं कि सभी उपलब्ध हैं और उपलब्ध हैं और सर्वर Ids मेल खाता है जो हम प्रति cnf फ़ाइल ईयरइलर सेट करते हैं।

$ mysql --host=localhost --protocol=tcp --port=3306 -e "Select @@hostname, @@version, @@server_id "
+--------------+-----------+-------------+
| @@hostname | @@version | @@server_id |
+--------------+-----------+-------------+
| 58e9663afe8d | 8.0.19 | 80 |
+--------------+-----------+-------------+
$ mysql --host=localhost --protocol=tcp --port=3307 -e "Select @@hostname, @@version, @@server_id "
+--------------+-----------+-------------+
| @@hostname | @@version | @@server_id |
+--------------+-----------+-------------+
| b240917f051a | 5.7.29 | 57 |
+--------------+-----------+-------------+
$ mysql --host=localhost --protocol=tcp --port=3308 -e "Select @@hostname, @@version, @@server_id "
+--------------+-----------+-------------+
| @@hostname | @@version | @@server_id |
+--------------+-----------+-------------+
| b4653850cfe9 | 5.6.47 | 56 |
+--------------+-----------+-------------+
$ mysql --host=localhost --protocol=tcp --port=3309 -e "Select @@hostname, @@version, @@server_id "
+--------------+-----------+-------------+
| @@hostname | @@version | @@server_id |
+--------------+-----------+-------------+
| 22e169004583 | 5.5.62 | 55 |
+--------------+-----------+-------------+