ओपन सोर्स डेटाबेस तेजी से मुख्यधारा बन रहे हैं, इसलिए मालिकाना इंजन से ओपन सोर्स इंजन में माइग्रेशन अब एक तरह का उद्योग चलन है। इसका मतलब यह भी है कि हम DBA के प्रबंधन के लिए अक्सर कई डेटाबेस बैकएंड होते हैं।
पिछले कुछ ब्लॉग पोस्ट में, मेरे सहयोगी पॉल नामुआग और मैंने Oracle से Percona, MariaDB और MySQL में प्रवास के कई पहलुओं को कवर किया। माइग्रेशन का स्पष्ट लक्ष्य आपके एप्लिकेशन को नए डेटाबेस वातावरण में अधिक कुशलता से चलाना और चलाना है, हालांकि यह सुनिश्चित करना महत्वपूर्ण है कि कर्मचारी इसका समर्थन करने के लिए तैयार हैं।
यह ब्लॉग इसी तरह के कार्यों के संदर्भ में MySQL के बुनियादी संचालन को कवर करता है जो आप अपने Oracle वातावरण में दैनिक रूप से करेंगे। यह आपको समय बचाने के लिए अलग-अलग विषयों पर गहन जानकारी प्रदान करता है क्योंकि आप Oracle ज्ञान से संबंधित हो सकते हैं जिसे आपने वर्षों से पहले ही बनाया है।
हम बाहरी कमांड लाइन टूल्स के बारे में भी बात करेंगे जो डिफ़ॉल्ट MySQL इंस्टॉलेशन में गायब हैं लेकिन दैनिक संचालन को कुशलतापूर्वक करने के लिए आवश्यक हैं। उदाहरण के लिए, ओपन सोर्स संस्करण Oracle क्लाउड कंट्रोल के समकक्ष के साथ नहीं आता है, इसलिए यदि आप कुछ इसी तरह की तलाश कर रहे हैं तो ClusterControl चेकआउट करें।
इस ब्लॉग में, हम मान रहे हैं कि आपको MySQL की तुलना में Oracle का बेहतर ज्ञान है और इसलिए आप दोनों के बीच के संबंध को जानना चाहेंगे। उदाहरण लिनक्स प्लेटफॉर्म पर आधारित हैं हालांकि आप विंडोज़ पर MySQL को प्रबंधित करने में कई समानताएं पा सकते हैं।
मैं MySQL से कैसे कनेक्ट करूं?
आइए अपनी यात्रा एक बहुत ही (प्रतीत होता है) बुनियादी कार्य के साथ शुरू करें। दरअसल, यह एक तरह का कार्य है जो Oracle और MySQL में अलग-अलग लॉगिन अवधारणाओं के कारण कुछ भ्रम पैदा कर सकता है।
sqlplus / as sysdba कनेक्शन के बराबर "mysql" टर्मिनल कमांड फ्लैग -यूरूट के साथ है। MySQL की दुनिया में, सुपरयुसर को रूट कहा जाता है। MySQL डेटाबेस उपयोगकर्ता (रूट सहित) को उस नाम और होस्ट द्वारा परिभाषित किया जाता है जहां से वह कनेक्ट हो सकता है।
उपयोगकर्ता और होस्ट के बारे में जानकारी जहां से यह कनेक्ट हो सकता है, mysql.user तालिका में संग्रहीत है। कनेक्शन प्रयास के साथ, MySQL जांचता है कि क्लाइंट होस्ट, उपयोगकर्ता नाम और पासवर्ड मेटाडेटा तालिका में पंक्ति से मेल खाते हैं या नहीं।
यह Oracle की तुलना में थोड़ा अलग दृष्टिकोण है जहां हमारे पास केवल एक उपयोगकर्ता नाम और पासवर्ड है, लेकिन जो Oracle कनेक्शन प्रबंधक से परिचित हैं उनमें कुछ समानताएं मिल सकती हैं।
आपको Oracle की तरह पूर्वनिर्धारित TNS प्रविष्टियाँ नहीं मिलेंगी। आमतौर पर, एक व्यवस्थापक कनेक्शन के लिए, हमें उपयोगकर्ता, पासवर्ड और -h होस्ट ध्वज की आवश्यकता होती है। डिफ़ॉल्ट पोर्ट 3306 है (जैसे Oracle में 1521) लेकिन यह अलग-अलग सेटअप पर भिन्न हो सकता है।
डिफ़ॉल्ट रूप से, कई इंस्टॉलेशन में किसी भी मशीन से रूट एक्सेस कनेक्शन होगा ([email protected]'%') अवरुद्ध, इसलिए आपको MySQL को होस्ट करने वाले सर्वर में लॉग इन करना होगा, आमतौर पर ssh के माध्यम से।
निम्नलिखित टाइप करें:
mysql -u root
जब रूट पासवर्ड सेट नहीं होता है तो यह काफी है। यदि पासवर्ड की आवश्यकता है तो आपको ध्वज -p जोड़ना चाहिए।
mysql -u root -p
अब आप mysql क्लाइंट (sqlplus के समतुल्य) में लॉग इन हैं और एक संकेत देखेंगे, आमतौर पर 'mysql>'।
क्या MySQL चालू है और चल रहा है?
यह पता लगाने के लिए कि क्या यह चल रहा है, आप mysql सेवा स्टार्टअप स्क्रिप्ट या mysqladmin कमांड का उपयोग कर सकते हैं। फिर आप ps कमांड का उपयोग यह देखने के लिए कर सकते हैं कि क्या MySQL प्रक्रियाएं ऊपर और चल रही हैं। एक अन्य विकल्प mysqladmin हो सकता है, जो एक उपयोगिता है जिसका उपयोग प्रशासनिक कार्यों को करने के लिए किया जाता है।
mysqladmin -u root -p status
डेबियन पर:
/etc/init.d/mysql status
यदि आप RedHat या Fedora का उपयोग कर रहे हैं तो आप निम्न स्क्रिप्ट का उपयोग कर सकते हैं:
service mysqld status
या
/etc/init.d/mysqld status
या
systemctl status mysql.service
मारियाडीबी उदाहरणों पर, आपको मारियाडीबी सेवा नाम की तलाश करनी चाहिए।
systemctl status mariadb
इस डेटाबेस में क्या है?
Oracle की तरह, आप डेटाबेस ऑब्जेक्ट के बारे में जानकारी प्राप्त करने के लिए मेटाडेटा ऑब्जेक्ट को क्वेरी कर सकते हैं।
यहां कुछ शॉर्टकट का उपयोग करना आम बात है, ऐसे कमांड जो आपको वस्तुओं को सूचीबद्ध करने या वस्तुओं का डीडीएल प्राप्त करने में मदद करते हैं।
show databases;
use database_name;
show tables;
show table status;
show index from table_name;
show create table table_name;
Oracle के समान आप तालिका का वर्णन कर सकते हैं:
desc table_name;
मेरा डेटा कहाँ संग्रहीत है?
MySQL में ASM जैसा कोई डेडिकेटेड इंटरनल स्टोरेज नहीं है। सभी डेटा फ़ाइलें नियमित OS माउंट पॉइंट में रखी जाती हैं। डिफ़ॉल्ट स्थापना के साथ, आप अपना डेटा इसमें पा सकते हैं:
/var/lib/mysql
स्थान परिवर्तनशील डेटादिर पर आधारित है।
[email protected]:~# cat /etc/mysql/my.cnf | grep datadir
datadir=/var/lib/mysql
आप वहां प्रत्येक डेटाबेस के लिए एक निर्देशिका देखेंगे।
संस्करण और भंडारण इंजन के आधार पर (हाँ कुछ यहाँ हैं), डेटाबेस की निर्देशिका में प्रारूप *.frm की फ़ाइलें हो सकती हैं, जो डेटाबेस के भीतर प्रत्येक तालिका की संरचना को परिभाषित करती हैं। MyISAM तालिकाओं के लिए, डेटा (*.MYD) और अनुक्रमणिका (*.MYI) इस निर्देशिका में भी संग्रहीत हैं।
InnoDB टेबल को InnoDB टेबलस्पेस में स्टोर किया जाता है। जिनमें से प्रत्येक में एक या अधिक फाइलें होती हैं, जो Oracle टेबलस्पेस के समान होती हैं। एक डिफ़ॉल्ट स्थापना में, एक MySQL सर्वर पर सभी डेटाबेस के लिए सभी InnoDB डेटा और इंडेक्स एक टेबलस्पेस में रखे जाते हैं, जिसमें एक फ़ाइल होती है:/var/lib/mysql/ibdata1. अधिकांश सेटअपों में, आप Oracle जैसे टेबलस्पेस को प्रबंधित नहीं करते हैं। सबसे अच्छा अभ्यास उन्हें ऑटोएक्सटेंड चालू और अधिकतम आकार असीमित रखना है।
[email protected]:~# cat /etc/mysql/my.cnf | grep innodb-data-file-path
innodb-data-file-path = ibdata1:100M:autoextend
InnoDB में लॉग फ़ाइलें हैं, जो Oracle रीडो लॉग के बराबर हैं, जिससे स्वचालित क्रैश पुनर्प्राप्ति की अनुमति मिलती है। डिफ़ॉल्ट रूप से दो लॉग फ़ाइलें होती हैं:/var/lib/mysql/ib_logfile0 और /var/lib/mysql/ib_logfile1. पूर्ववत डेटा को टेबलस्पेस फ़ाइल में रखा जाता है।
[email protected]:/var/lib/mysql# ls -rtla | grep logfile
-rw-rw---- 1 mysql mysql 268435456 Dec 15 00:59 ib_logfile1
-rw-rw---- 1 mysql mysql 268435456 Mar 6 11:45 ib_logfile0
मेटाडेटा जानकारी कहां है?
कोई dba_*, user_*, all_* प्रकार के विचार नहीं हैं लेकिन MySQL में आंतरिक मेटाडेटा दृश्य हैं।
Information_schema को SQL 2003 मानक में परिभाषित किया गया है और इसे अन्य प्रमुख डेटाबेस द्वारा कार्यान्वित किया जाता है, उदा। SQL सर्वर, PostgreSQL.
MySQL 5.0 के बाद से, info_schema डेटाबेस उपलब्ध है, जिसमें डेटा डिक्शनरी जानकारी है। जानकारी वास्तव में बाहरी FRM फ़ाइलों में संग्रहीत की गई थी। अंत में, कई वर्षों के बाद संस्करण 8.0 में .frm फ़ाइलें चली गई हैं। मेटाडेटा अभी भी info_schema डेटाबेस में दिखाई देता है लेकिन InnoDB स्टोरेज इंजन का उपयोग करता है।
mysql क्लाइंट के भीतर डेटा डिक्शनरी में निहित सभी वास्तविक दृश्यों को देखने के लिए, info_schema डेटाबेस पर स्विच करें:
use information_schema;
show tables;
आप MySQL डेटाबेस में अतिरिक्त जानकारी प्राप्त कर सकते हैं, जिसमें db, ईवेंट (MySQL जॉब्स), प्लगइन्स, प्रतिकृति, डेटाबेस, उपयोगकर्ता आदि के बारे में जानकारी शामिल है।
दृश्यों की संख्या संस्करण और विक्रेता पर निर्भर करती है।
v$session से * चुनें
v$session से Oracle का चयन * यहां SHOW PROCESSLIST कमांड के साथ दर्शाया गया है जो थ्रेड्स की सूची दिखाता है।
mysql> SHOW PROCESSLIST;
+---------+------------------+------------------+--------------------+---------+--------+--------------------+------------------+-----------+---------------+
| Id | User | Host | db | Command | Time | State | Info | Rows_sent | Rows_examined |
+---------+------------------+------------------+--------------------+---------+--------+--------------------+------------------+-----------+---------------+
| 1 | system user | | NULL | Sleep | 469264 | wsrep aborter idle | NULL | 0 | 0 |
| 2 | system user | | NULL | Sleep | 469264 | NULL | NULL | 0 | 0 |
| 3 | system user | | NULL | Sleep | 469257 | NULL | NULL | 0 | 0 |
| 4 | system user | | NULL | Sleep | 469257 | NULL | NULL | 0 | 0 |
| 6 | system user | | NULL | Sleep | 469257 | NULL | NULL | 0 | 0 |
| 16 | maxscale | 10.0.3.168:5914 | NULL | Sleep | 5 | | NULL | 4 | 4 |
| 59 | proxysql-monitor | 10.0.3.168:6650 | NULL | Sleep | 7 | | NULL | 0 | 0 |
| 81 | proxysql-monitor | 10.0.3.78:62896 | NULL | Sleep | 6 | | NULL | 0 | 0 |
| 1564 | proxysql-monitor | 10.0.3.78:25064 | NULL | Sleep | 3 | | NULL | 0 | 0 |
| 1822418 | cmon | 10.0.3.168:41202 | information_schema | Sleep | 0 | | NULL | 0 | 8 |
| 1822631 | cmon | 10.0.3.168:43254 | information_schema | Sleep | 4 | | NULL | 1 | 1 |
| 1822646 | cmon | 10.0.3.168:43408 | information_schema | Sleep | 0 | | NULL | 464 | 464 |
| 2773260 | backupuser | localhost | mysql | Query | 0 | init | SHOW PROCESSLIST | 0 | 0 |
+---------+------------------+------------------+--------------------+---------+--------+--------------------+------------------+-----------+---------------+
13 rows in set (0.00 sec)
यह info_schema.processlist दृश्य में संग्रहीत जानकारी पर आधारित है। दृश्य के लिए PROCESS विशेषाधिकार होना आवश्यक है। यह आपको यह जांचने में भी मदद कर सकता है कि क्या आप प्रक्रियाओं की अधिकतम संख्या से बाहर हो रहे हैं।
अलर्ट लॉग कहां है?
त्रुटि लॉग my.cnf में या शो वेरिएबल कमांड के माध्यम से पाया जा सकता है।
mysql> show variables like 'log_error';
+---------------+--------------------------+
| Variable_name | Value |
+---------------+--------------------------+
| log_error | /var/lib/mysql/error.log |
+---------------+--------------------------+
1 row in set (0.00 sec)
उपयोगकर्ताओं और उनकी अनुमतियों की सूची कहां है?
उपयोगकर्ताओं के बारे में जानकारी mysql.user तालिका में संग्रहीत की जाती है, जबकि अनुदान mysql.user, mysql.tables_priv,
सहित कई स्थानों पर संग्रहीत किए जाते हैं।MySQL यूजर एक्सेस को इसमें परिभाषित किया गया है:
mysql.columns_priv, mysql.tables_priv, mysql.db,mysql.user
अनुदानों को सूचीबद्ध करने का बेहतर तरीका पीटी-अनुदान का उपयोग करना है, जो पेरकोना टूलकिट (प्रत्येक MySQL DBA के लिए आवश्यक है) का उपकरण है।
pt-show-grants --host localhost --user root --ask-pass
वैकल्पिक रूप से, आप निम्न क्वेरी का उपयोग कर सकते हैं (कैल्वाल्डो द्वारा निर्मित)
SELECT
CONCAT("`",gcl.Db,"`") AS 'Database(s) Affected',
CONCAT("`",gcl.Table_name,"`") AS 'Table(s) Affected',
gcl.User AS 'User-Account(s) Affected',
IF(gcl.Host='%','ALL',gcl.Host) AS 'Remote-IP(s) Affected',
CONCAT("GRANT ",UPPER(gcl.Column_priv)," (",GROUP_CONCAT(gcl.Column_name),") ",
"ON `",gcl.Db,"`.`",gcl.Table_name,"` ",
"TO '",gcl.User,"'@'",gcl.Host,"';") AS 'GRANT Statement (Reconstructed)'
FROM mysql.columns_priv gcl
GROUP BY CONCAT(gcl.Db,gcl.Table_name,gcl.User,gcl.Host)
/* SELECT * FROM mysql.columns_priv */
UNION
/* [Database.Table]-Specific Grants */
SELECT
CONCAT("`",gtb.Db,"`") AS 'Database(s) Affected',
CONCAT("`",gtb.Table_name,"`") AS 'Table(s) Affected',
gtb.User AS 'User-Account(s) Affected',
IF(gtb.Host='%','ALL',gtb.Host) AS 'Remote-IP(s) Affected',
CONCAT(
"GRANT ",UPPER(gtb.Table_priv)," ",
"ON `",gtb.Db,"`.`",gtb.Table_name,"` ",
"TO '",gtb.User,"'@'",gtb.Host,"';"
) AS 'GRANT Statement (Reconstructed)'
FROM mysql.tables_priv gtb
WHERE gtb.Table_priv!=''
/* SELECT * FROM mysql.tables_priv */
UNION
/* Database-Specific Grants */
SELECT
CONCAT("`",gdb.Db,"`") AS 'Database(s) Affected',
"ALL" AS 'Table(s) Affected',
gdb.User AS 'User-Account(s) Affected',
IF(gdb.Host='%','ALL',gdb.Host) AS 'Remote-IP(s) Affected',
CONCAT(
'GRANT ',
CONCAT_WS(',',
IF(gdb.Select_priv='Y','SELECT',NULL),
IF(gdb.Insert_priv='Y','INSERT',NULL),
IF(gdb.Update_priv='Y','UPDATE',NULL),
IF(gdb.Delete_priv='Y','DELETE',NULL),
IF(gdb.Create_priv='Y','CREATE',NULL),
IF(gdb.Drop_priv='Y','DROP',NULL),
IF(gdb.Grant_priv='Y','GRANT',NULL),
IF(gdb.References_priv='Y','REFERENCES',NULL),
IF(gdb.Index_priv='Y','INDEX',NULL),
IF(gdb.Alter_priv='Y','ALTER',NULL),
IF(gdb.Create_tmp_table_priv='Y','CREATE TEMPORARY TABLES',NULL),
IF(gdb.Lock_tables_priv='Y','LOCK TABLES',NULL),
IF(gdb.Create_view_priv='Y','CREATE VIEW',NULL),
IF(gdb.Show_view_priv='Y','SHOW VIEW',NULL),
IF(gdb.Create_routine_priv='Y','CREATE ROUTINE',NULL),
IF(gdb.Alter_routine_priv='Y','ALTER ROUTINE',NULL),
IF(gdb.Execute_priv='Y','EXECUTE',NULL),
IF(gdb.Event_priv='Y','EVENT',NULL),
IF(gdb.Trigger_priv='Y','TRIGGER',NULL)
),
" ON `",gdb.Db,"`.* TO '",gdb.User,"'@'",gdb.Host,"';"
) AS 'GRANT Statement (Reconstructed)'
FROM mysql.db gdb
WHERE gdb.Db != ''
/* SELECT * FROM mysql.db */
UNION
/* User-Specific Grants */
SELECT
"ALL" AS 'Database(s) Affected',
"ALL" AS 'Table(s) Affected',
gus.User AS 'User-Account(s) Affected',
IF(gus.Host='%','ALL',gus.Host) AS 'Remote-IP(s) Affected',
CONCAT(
"GRANT ",
IF((gus.Select_priv='N')&(gus.Insert_priv='N')&(gus.Update_priv='N')&(gus.Delete_priv='N')&(gus.Create_priv='N')&(gus.Drop_priv='N')&(gus.Reload_priv='N')&(gus.Shutdown_priv='N')&(gus.Process_priv='N')&(gus.File_priv='N')&(gus.References_priv='N')&(gus.Index_priv='N')&(gus.Alter_priv='N')&(gus.Show_db_priv='N')&(gus.Super_priv='N')&(gus.Create_tmp_table_priv='N')&(gus.Lock_tables_priv='N')&(gus.Execute_priv='N')&(gus.Repl_slave_priv='N')&(gus.Repl_client_priv='N')&(gus.Create_view_priv='N')&(gus.Show_view_priv='N')&(gus.Create_routine_priv='N')&(gus.Alter_routine_priv='N')&(gus.Create_user_priv='N')&(gus.Event_priv='N')&(gus.Trigger_priv='N')&(gus.Create_tablespace_priv='N')&(gus.Grant_priv='N'),
"USAGE",
IF((gus.Select_priv='Y')&(gus.Insert_priv='Y')&(gus.Update_priv='Y')&(gus.Delete_priv='Y')&(gus.Create_priv='Y')&(gus.Drop_priv='Y')&(gus.Reload_priv='Y')&(gus.Shutdown_priv='Y')&(gus.Process_priv='Y')&(gus.File_priv='Y')&(gus.References_priv='Y')&(gus.Index_priv='Y')&(gus.Alter_priv='Y')&(gus.Show_db_priv='Y')&(gus.Super_priv='Y')&(gus.Create_tmp_table_priv='Y')&(gus.Lock_tables_priv='Y')&(gus.Execute_priv='Y')&(gus.Repl_slave_priv='Y')&(gus.Repl_client_priv='Y')&(gus.Create_view_priv='Y')&(gus.Show_view_priv='Y')&(gus.Create_routine_priv='Y')&(gus.Alter_routine_priv='Y')&(gus.Create_user_priv='Y')&(gus.Event_priv='Y')&(gus.Trigger_priv='Y')&(gus.Create_tablespace_priv='Y')&(gus.Grant_priv='Y'),
"ALL PRIVILEGES",
CONCAT_WS(',',
IF(gus.Select_priv='Y','SELECT',NULL),
IF(gus.Insert_priv='Y','INSERT',NULL),
IF(gus.Update_priv='Y','UPDATE',NULL),
IF(gus.Delete_priv='Y','DELETE',NULL),
IF(gus.Create_priv='Y','CREATE',NULL),
IF(gus.Drop_priv='Y','DROP',NULL),
IF(gus.Reload_priv='Y','RELOAD',NULL),
IF(gus.Shutdown_priv='Y','SHUTDOWN',NULL),
IF(gus.Process_priv='Y','PROCESS',NULL),
IF(gus.File_priv='Y','FILE',NULL),
IF(gus.References_priv='Y','REFERENCES',NULL),
IF(gus.Index_priv='Y','INDEX',NULL),
IF(gus.Alter_priv='Y','ALTER',NULL),
IF(gus.Show_db_priv='Y','SHOW DATABASES',NULL),
IF(gus.Super_priv='Y','SUPER',NULL),
IF(gus.Create_tmp_table_priv='Y','CREATE TEMPORARY TABLES',NULL),
IF(gus.Lock_tables_priv='Y','LOCK TABLES',NULL),
IF(gus.Execute_priv='Y','EXECUTE',NULL),
IF(gus.Repl_slave_priv='Y','REPLICATION SLAVE',NULL),
IF(gus.Repl_client_priv='Y','REPLICATION CLIENT',NULL),
IF(gus.Create_view_priv='Y','CREATE VIEW',NULL),
IF(gus.Show_view_priv='Y','SHOW VIEW',NULL),
IF(gus.Create_routine_priv='Y','CREATE ROUTINE',NULL),
IF(gus.Alter_routine_priv='Y','ALTER ROUTINE',NULL),
IF(gus.Create_user_priv='Y','CREATE USER',NULL),
IF(gus.Event_priv='Y','EVENT',NULL),
IF(gus.Trigger_priv='Y','TRIGGER',NULL),
IF(gus.Create_tablespace_priv='Y','CREATE TABLESPACE',NULL)
)
)
),
" ON *.* TO '",gus.User,"'@'",gus.Host,"' REQUIRE ",
CASE gus.ssl_type
WHEN 'ANY' THEN
"SSL "
WHEN 'X509' THEN
"X509 "
WHEN 'SPECIFIED' THEN
CONCAT_WS("AND ",
IF((LENGTH(gus.ssl_cipher)>0),CONCAT("CIPHER '",CONVERT(gus.ssl_cipher USING utf8),"' "),NULL),
IF((LENGTH(gus.x509_issuer)>0),CONCAT("ISSUER '",CONVERT(gus.ssl_cipher USING utf8),"' "),NULL),
IF((LENGTH(gus.x509_subject)>0),CONCAT("SUBJECT '",CONVERT(gus.ssl_cipher USING utf8),"' "),NULL)
)
ELSE "NONE "
END,
"WITH ",
IF(gus.Grant_priv='Y',"GRANT OPTION ",""),
"MAX_QUERIES_PER_HOUR ",gus.max_questions," ",
"MAX_CONNECTIONS_PER_HOUR ",gus.max_connections," ",
"MAX_UPDATES_PER_HOUR ",gus.max_updates," ",
"MAX_USER_CONNECTIONS ",gus.max_user_connections,
";"
) AS 'GRANT Statement (Reconstructed)'
FROM mysql.user gus;
mysql उपयोगकर्ता कैसे बनाएं
'उपयोगकर्ता बनाएँ' प्रक्रिया Oracle के समान है। सबसे सरल उदाहरण हो सकता है:
CREATE user 'username'@'hostname' identified by 'password';
GRANT privilege_name on *.* TO 'username'@'hostname';
इसके साथ एक पंक्ति में अनुदान देने और बनाने का विकल्प:
GRANT privilege_name ON *.* TO 'username'@'hostname' identified by 'password';
MySQL 8.0 में हटा दिया गया है।
मैं MySQL को कैसे शुरू और बंद करूँ?
आप सेवा के साथ MySQL को रोक सकते हैं और शुरू कर सकते हैं।
वास्तविक आदेश Linux वितरण और सेवा नाम पर निर्भर करता है।
नीचे आप सेवा नाम mysqld के साथ एक उदाहरण पा सकते हैं।
उबंटू
/etc/init.d/mysqld start
/etc/init.d/mysqld stop
/etc/init.d/mysqld restart
रेडहैट/सेंटोस
service mysqld start
service mysqld stop
service mysqld restart
systemctl start mysqld.service
systemctl stop mysqld.service
systemctl restart mysqld.service
MySQL सर्वर कॉन्फ़िगरेशन डेटा कहां है?
कॉन्फ़िगरेशन my.cnf फ़ाइल में संग्रहीत है।
संस्करण 8.0 तक, कोई भी गतिशील सेटिंग परिवर्तन जो पुनरारंभ होने के बाद भी बना रहना चाहिए, के लिए my.cnf फ़ाइल के मैन्युअल अपडेट की आवश्यकता होती है। Oracle के स्कोप =दोनों के समान, आप लगातार विकल्प का उपयोग करके मान बदल सकते हैं।
mysql> SET PERSIST max_connections = 1000;
mysql> SET @@PERSIST.max_connections = 1000;
पुराने संस्करणों के लिए उपयोग करें:
mysql> SET GLOBAL max_connections = 1000;
$ vi /etc/mysql/my.cnf
SET GLOBAL max_connections = 1000;
मैं MySQL का बैकअप कैसे ले सकता हूं?
mysql बैकअप को निष्पादित करने के दो तरीके हैं।
छोटे डेटाबेस या छोटे चुनिंदा बैकअप के लिए, आप mysqldump कमांड का उपयोग कर सकते हैं।
mysqldump के साथ डेटाबेस बैकअप (तार्किक बैकअप):
mysqldump -uuser -p --databases db_name --routines --events --single-transaction | gzip > db_name_backup.sql.gz
xtrabackup, mariabackup (हॉट बाइनरी बैकअप)
हॉट बाइनरी बैकअप चलाने के लिए एक्स्ट्राबैकअप या मारियाबैकअप, बाहरी उपकरणों का उपयोग करना बेहतर तरीका है।
Oracle, MySQL Enterprise Edition नामक भुगतान किए गए संस्करण में हॉट बाइनरी बैकअप प्रदान करता है।
mariabackup --user=root --password=PASSWORD --backup --target-dir=/u01/backups/
अन्य सर्वर पर बैकअप स्ट्रीम करें
बेहतर पोर्ट पर बाहरी सर्वर पर श्रोता प्रारंभ करें (इस उदाहरण 1984 में)
nc -l 1984 | pigz -cd - | pv | xbstream -x -C /u01/backups
बैकअप चलाएँ और बाहरी होस्ट को स्थानांतरित करें
innobackupex --user=root --password=PASSWORD --stream=xbstream /var/tmp | pigz | pv | nc external_host.com 1984
उपयोगकर्ता अनुमति कॉपी करें
उपयोगकर्ता अनुमति की प्रतिलिपि बनाने और उन्हें अन्य सर्वर पर स्थानांतरित करने के लिए अक्सर इसकी आवश्यकता होती है।
ऐसा करने का अनुशंसित तरीका पीटी-शो-अनुदान का उपयोग करना है।
pt-show-grants > /u01/backups
मैं MySQL को कैसे पुनर्स्थापित करूं?
लॉजिकल बैकअप रिस्टोर
MySQLdump SQL फ़ाइल बनाता है, जिसे सोर्स कमांड से निष्पादित किया जा सकता है।
निष्पादन की लॉग फ़ाइल रखने के लिए, टी कमांड का उपयोग करें।
mysql> tee dump.log
mysql> source mysqldump.sql
बाइनरी बैकअप पुनर्स्थापना (xtrabackup/mariabackup)
बाइनरी बैकअप से MySQL को पुनर्स्थापित करने के लिए आपको पहले फ़ाइलों को पुनर्स्थापित करना होगा और फिर लॉग फ़ाइलों को लागू करना होगा।
आप Oracle में पुनर्स्थापित करने और पुनर्प्राप्त करने के लिए इस प्रक्रिया की तुलना कर सकते हैं।
xtrabackup --copy-back --target-dir=/var/lib/data
innobackupex --apply-log --use-memory=[values in MB or GB] /var/lib/data
उम्मीद है, ये सुझाव बुनियादी प्रशासनिक कार्यों को करने का एक अच्छा अवलोकन देते हैं।