recent
أخبار ساخنة

شرح تثبيت MySQL 8 على Debian 10 وتأمينه بـ SSL ... بالخطوات

الصفحة الرئيسية
شرح تثبيت MySQL 8 على Debian 10 وتأمينه بـ SSL  ... بالخطوات


MySQL هو نظام قاعدة بيانات علائقية (RDBMS) مفتوح المصدر (open-source) يعمل على العديد من أنظمة التشغيل بما في ذلك Windows و Linux و macOS و FreeBSD.

من المحتمل أن يكون أكثر أنظمة RDBMS مفتوحة المصدر شيوعًا ومكونًا أساسياً في LAMP و LEMP Stacks.

تعتمد العديد من التطبيقات على MySQL مثل WordPress و Joomla و TYPO3 و phpBB وغيرها الكثير.


تمت إضافة العديد من الميزات الجديدة إلى MySQL 8 بما في ذلك دعم JSON وTransactional Data Dictionary وPersistent runtime configuration وDocument Store وOptimizer Hints وSQL roles و CTE وwindow functions وInvisible indexes وغيرها الكثير.


سنشرح هنا بعض الأشياء المتعلقة بخادم MySQL:


تثبيت MySQL Server 8 على Debian Buster 10

إعداد كلمة مرور MySQL Root

تأمين خادم MySQL (تغيير عنوان الربط ، المنفذ  ..... )

إعداد SSL وتمكين الاتصال البعيد (Remote Connection) لخادم MySQL

تثبيت وإعداد phpMyAdmin

استعلام MySQL الأساسي لإنشاء مستخدم وقاعدة بيانات وما إلى ذلك

إعداد backup  تلقائي لقواعد بيانات MySQL

المتطلبات الأساسية


سنقوم بتثبيت MySQL Server 8.04 على أحدث إصدار من Debian Buster 10 بسعة 2 جيجابايت من ذاكرة الوصول العشوائي و 4 وحدات معالجة مركزية. أيضًا ، نحتاج إلى صلاحيات المستخدم root لتثبيت الحزم والقيام بتعديلات النظام.


إضافة Repository


سنقوم بتثبيت MySQL Server 8 من مستودع MySQL الرسمي.

نحتاج إلى إضافة مستودع MySQL الرسمي إلى Debian Server.


ثبّت حزمة "GnuPG" باستخدام الأمر apt.


sudo apt install gnupg -y


قم بتنزيل مستودع MySQL APT وأضفه إلى نظامك.


wget -q http://repo.mysql.com/mysql-apt-config_0.8.15-1_all.deb

sudo dpkg -i mysql-apt-config_0.8.15-1_all.deb


اترك الاعدادات الافتراضية واختار  OK.





قم بتحديث جميع المستودعات المتاحة على نظام دبيان باستخدام الأمر التالي.


sudo apt update


وستحصل على مستودع MySQL الرسمي في القائمة.





تمت إضافة مستودع MySQL الرسمي.


تثبيت MySQL Server


لتثبيت MySQL Server 8.0 على نظام Debian  قم بتشغيل الأمر apt.


sudo apt install mysql-server


اكتب الآن كلمة مرور الـ root لتثبيت MySQL الخاص بك واختر OK.





اكتب كلمة المرور مرة أخرى.





سيُطلب منك إعدادات authentication plugin الافتراضية.

اختار Strong Password Encryption.

 واختار OK.





تم الانتهاء من تثبيت MySQL Server 8.0.


تحقق الآن من خدمة MySQL باستخدام الأمر التالي.


systemctl is-enabled mysql

systemctl status mysql


ستحصل على النتيجة التالية.




خدمة MySQL تعمل.

سيتم تشغيل الخدمة تلقائيًا عند كل boot للنظام.


تأمين MySQL Deployment باستخدام mysql_secure_password


سنعمل على تحسين أمان تثبيت خادم MySQL باستخدام أداة سطر الأوامر " mysql_secure_installation ".



الآن قم بتشغيل الأمر " mysql_secure_installation " في الـ shell.


mysql_secure_installation


At the beginning of the MySQL installation, you've already configured the root password for MySQL. Now type the password to continue to the process.

في بداية تثبيت MySQL قمنا بالفعل بتكوين كلمة مرور الـ root لـ MySQL.

اكتب كلمة المرور لمتابعة العملية.


Enter the password for user root: TYPE YOUR MYSQL ROOT PASSWORD


اكتب Y  لإعداد VALIDATE PASSWORD.


VALIDATE PASSWORD COMPONENT can be used to test passwords

and improve security. It checks the strength of the password

and allows the users to set only those passwords which are

secure enough. Would you like to setup VALIDATE PASSWORD component?


Press y|Y for Yes, any other key for No: Y


اختر الآن مستوى سياسة التحقق من صحة كلمة المرور لجميع المستخدمين.

اكتب 2 لإعداد سياسة مستوى كلمة المرور STRONG.


There are three levels of password validation policy:

LOW    Length >= 8

MEDIUM Length >= 8, numeric, mixed case, and special characters

STRONG Length >= 8, numeric, mixed case, special characters, and dictionary                  file

Please enter 0 = LOW, 1 = MEDIUM and 2 = STRONG: 2

Using existing password for root.


سيتحقق الأمر "mysql_secure_installation" من قوة كلمة المرور الحالية. 

قوة كلمة المرور الحالية لدينا هي " 50 ".

اكتب Y لتغيير كلمة المرور الحالية بكلمة مرور جديدة أقوى.


Estimated strength of the password: 50 

Change the password for root? ((Press y|Y for Yes, any other key for No) : Y


اكتب الآن كلمة مرورك القوية وتأكد من حصولك على النتيجة 100.

اكتب Y للمتابعة بكلمة المرور الجديدة.


New password: 

Re-enter new password: 

Estimated strength of the password: 100 

Do you wish to continue with the password provided? (Press y|Y for Yes, any other key for No) : Y


تم إعداد MySQL "VALIDATE PASSWORD" باستخدام سياسة كلمة مرور قوية وتم إنشاء كلمة مرور MySQL الجديدة.


سيُطلب منك إزالة المستخدم Anonymous الافتراضي.

اكتب Y لإزالة المستخدم Anonymous للتثبيت.


By default, a MySQL installation has an anonymous user,

allowing anyone to log into MySQL without creating a user account. This is intended only for testing, and to make the installation go a bit smoother.

You should remove them before moving into a production

environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) : Y


اكتب Y مرة أخرى لتعطيل تسجيل الدخول عن بُعد (remote login) إلى MySQL وإذا كنت تريد الوصول إلى خادم MySQL محليًا فقط.


Normally, root should only be allowed to connect from

'localhost'. This ensures that someone cannot guess at

the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) : Y


قم بإزالة قاعدة البيانات الافتراضية test من MySQL Server.

اكتب Y واضغط على Enter للمتابعة.


By default, MySQL comes with a database named 'test' that

anyone can access. This is also intended only for testing,

and should be removed before moving into a production

environment.

Remove test database and access to it? (Press y|Y for Yes, any other key for No) : Y


اكتب Y مرة أخرى لإعادة تحميل جداول الصلاحيات (privilege).


Reloading the privilege tables will ensure that all changes

made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y



تأمين خادم MySQL باستخدام الإعدادات الإضافية


سنضيف إعداداً إضافيًا لتحسين MySQL Server deployment.

سنحدد bind-address لـ MySQL Server  ونغير المنفذ الافتراضي ، ونعطل تحميل ملف البيانات ونضع سياسة انتهاء صلاحية كلمة المرور لجميع مستخدمي MySQL.


انتقل إلى المجلد "/etc/mysql/conf.d/" وأنشئ إعداداً جديدًا "mysqld.cnf" باستخدام محرر vim.


cd /etc/mysql/conf.d/

vim mysqld.cnf


الصق الإعدادات  التالية فيه.


[mysqld]

# MySQL running on 127.0.0.1 with port 8320

bind-address=127.0.0.1

port=8320

# Disable LOAD DATA LOCA

local-infile=0

# Password Expiration to 60 Days

default_password_lifetime=60

# MySQLX Plugin running on 127.0.0.1 with port 8321

mysqlx_bind_address=127.0.0.1

mysqlx_port=8321


احفظ وأغلق.


أعد تشغيل خدمة MySQL وتحقق من المنافذ المفتوحة على النظام باستخدام الأمر التالي.


systemctl restart mysql

ss -plnt


ستحصل على النتيجةالتالية




MySQL Server يعمل على عنوان IP المحلي "127.0.0.1" على منفذ TCP غير الافتراضي "8320".


بعد ذلك ، لتسجيل الدخول إلى MySQL shell باستخدام المنفذ المخصص  يمكنك استخدام الأمر "mysql" مع خيار "-P port" على النحو التالي.


mysql -u root -P 8320 -p


اكتب كلمة مرور الـ root  لخادم MySQL.


قم بتشغيل الاستعلام التالي للتحقق من تكوين منفذ MySQL Server.


show variables like 'port';


وستحصل على أن خادم MySQL يعمل على المنفذ المخصص "8320" على النحو التالي.





قمنا بتهيئة MySQL Server ليعمل على عنوان IP المحلي "127.0.0.1" باستخدام منفذ TCP المخصص "8320".


تأمين وتمكين اتصال MySQL Remote باستخدام SSL


يوصى بتمكين SSL لـ MySQL Server deployment



إنشاء SSL Certificates


بشكل افتراضي ، يتم إنشاء MySQL Server 8.0 لـ SSL Certificates تلقائيًا أثناء التثبيت.

جميع شهادات SSL الافتراضية متاحة في المجلد '/ var / lib / mysql'.


سننشئ شهادة SSL جديدة لخادم MySQL باستخدام أداة سطر الأوامر " mysql_ssl_rsa_setup ".


الآن قم بإنشاء مجلد SSL جديد '/ etc / mysql / certs' وقم بتغيير ملكية هذا المجلد إلى المستخدم 'mysql'.


mkdir -p /etc/mysql/certs/

sudo chown -R mysql:mysql /etc/mysql/certs


أنشئ شهادات SSL جديدة لخادم MySQL باستخدام الأمر التالي. وتأكد من تغيير " --suffix = STRING " باسمك.


sudo mysql_ssl_rsa_setup --suffix=HakasMySQLSrv --uid=mysql --datadir=/etc/mysql/certs/


تم إنشاء شهادات SSL جديدة لخادم MySQL في المجلد '/ etc / mysql / certs'.




تحقق من شهادات SSL الخاصة بك باستخدام الأمر التالي.


ls -lah /etc/mysql/certs/

openssl verify -CAfile /etc/mysql/certs/ca.pem /etc/mysql/certs/server-cert.pem /etc/mysql/certs/client-cert.pem


ستحصل على النتيجة التالية.





تم إنشاء شهادات SSL الجديدة لخادم MySQL في المجلد / etc / mysql / certs /.


تفعيل SSL و Remote Access MySQL Server


لتمكين SSL و remote access إلى MySQL Server ستحتاج إلى تغيير خيار "bind-address" بعنوان IP الخاص بشبكتك الداخلية وإضافة إعداد SSL لـ MySQL.


انتقل الآن إلى المجلد "/etc/mysql/conf.d/" وقم بتعديل mysqld.cnf الذي أنشأناه  باستخدام محرر vim.


cd /etc/mysql/conf.d/

vim mysqld.cnf


قم بتغيير bind-address بعنوان IP الداخلي الخاص بك على النحو التالي.


bind-address=172.16.0.3


أضف إعداد SSL لخادم MySQL أدناه وقم بتغيير مسار SSL الخاص بك.


ssl-ca=/etc/mysql/certs/ca.pem

ssl-cert=/etc/mysql/certs/server-cert.pem

ssl-key=/etc/mysql/certs/server-key.pem


يمكنك تحديد إصدار TLS لعملائك وإجبارهم على استخدام اتصال SSL الآمن فقط باستخدام الإعدادات التالية.


#require_secure_transport=ON

tls_version=TLSv1.1,TLSv1.2


احفظ وأغلق.


أعد تشغيل خدمة MySQL لتطبيق الإعدادات الجديدة وتحقق من عنوان IP لخادم MySQL باستخدام الأمر التالي.


systemctl restart mysql

ss -plnt


خادم MySQL قيد التشغيل ويعمل على عنوان IP للشبكة الداخلية مع تمكين SSL عليه.





إعداد Client واختبار اتصال SSL


للاتصال بخادم MySQL من مضيف / عميل آخر (Client) يجب عليك إنشاء مستخدم MySQL جديد ونسخ شهادات العميل وإضافة إعدادات MySQL للعميل.


سجّل الدخول إلى MySQL shell باستخدام الأمر التالي.


mysql -u root -P 8320 -p


قم بإنشاء مستخدم MySQL جديد للاتصال عن بعد باستخدام الاستعلام التالي.


CREATE USER 'remoteuser'@'%' IDENTIFIED WITH mysql_native_password BY 'MyRemoteUserPasswordMySQL39==' REQUIRE SSL;

GRANT ALL PRIVILEGES ON *.* TO 'remoteuser'@'%' WITH GRANT OPTION;

FLUSH PRIVILEGES;


اكتب exit لتسجيل الخروج.





تحتاج إلى نسخ CA وشهادة العميل (client certificate) والمفتاح (key) إلى جهاز العميل باستخدام أمر SCP.


scp /etc/mysql/certs/ca.pem root@clientIP:/certificates/directory/

scp /etc/mysql/certs/client-cert.pem root@clientIP:/certificates/directory/

scp /etc/mysql/certs/client-key.pem root@clientIP:/certificates/directory/


اتصل بجهاز العميل الخاص بك وأنشئ إعداداً جديدًا باستخدام محرر vim.


vim ~/.my.cnf


قم بلصق إعدادات عميل MySQL وقم بتغيير مسار شهادة SSL الخاص بالعميل.


[client]

ssl-ca=/home/gpk/certs/ca.pem

ssl-cert=/home/gpk/certs/client-cert.pem

ssl-key=/home/gpk/certs/client-key.pem


احفظ وأغلق.


للاتصال بخادم MySQL البعيد بمنفذ مخصص ، قم بتشغيل الأمر mysql التالي.


mysql -u remoteuser -h 172.16.0.3 -P 8320 -p





بمجرد تسجيل الدخول ، تحقق من حالة الاتصال باستخدام الاستعلام التالي.


STATUS

SELECT * FROM performance_schema.session_status

       WHERE VARIABLE_NAME IN ('Ssl_version','Ssl_cipher');


ستحصل على النتيجة التالية.




قمنا بتسجيل الدخول باستخدام اتصال SSL الآمن TLSv1.2 إلى MySQL Server.


تم تمكين الوصول عن بعد باستخدام اتصال SSL آمن لخادم MySQL.


تثبيت وإعداد phpMyAdmin


ستتعلم كيفية تثبيت أحدث إصدار من phpMyAdmin باستخدام خادم الويب Apache.

سوف تتعلم أيضًا كيفية الاتصال بخادم MySQL على المضيف البعيد بمنفذ مخصص ، وستتعلم أيضًا عن طريق SSL من phpMyAdmin.


قم بتثبيت بعض تبعيات الحزم باستخدام الأمر apt.


sudo apt install apache2 libapache2-mod-php php-imagick php-phpseclib php-php-gettext php-common php-mysql php-gd php-imap php-json php-curl php-zip php-xml php-mbstring php-bz2 php-intl php-gmp unzip


بعد ذلك ، انتقل إلى المجلد '/ var / www / html' وقم بتنزيل أحدث source code لـ  phpMyAdmin.


cd /var/www/html/

wget -q https://www.phpmyadmin.net/downloads/phpMyAdmin-latest-all-languages.tar.gz


فك ضغط source code الخاص بـ phpMyAdmin وأعد تسميته إلى المجلد الجديد المسمى phpMyAdmin.


tar -xf phpMyAdmin-latest-all-languages.tar.gz

mv phpMyAdmin-5.0.2-all-languages phpMyAdmin


اذهب إلى drectory / var / www / phpMyAdmin وانسخ ملف الإعداد الافتراضي إلى config.inc.php.


cd /var/www/html/phpMyAdmin/

cp config.sample.inc.php config.inc.php


قم بتعديل  ملف "config.inc.php" باستخدام محرر vim.


vim config.inc.php


قم بإنشاء blowfish secret cod باستخدام هذا الرابط والصق الرمز في سطر "blowfish_secret" على النحو التالي.


$cfg['blowfish_secret'] = '6}2]RFleN-JT=/vXD}L/0j0v.YALV/e3'; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */


اكتب تفاصيل MySQL Server ضمن سطر "Server Configuration" على النحو التالي.


/**

 * Servers configuration

 */

$i = 0;

.....

/* Custom MySQL Server Configuration */

$cfg['Servers'][$i]['host'] = '172.16.0.3';

$cfg['Servers'][$i]['port'] = '8320';

.....


قم بلصق الإعدادات التالية لتمكين اتصال SSL من phpMyAdmin إلى MySQL Server.

تأكد من تغيير مسار شهادات العميل و CA بمسار شهاداتك وتأكد من أن المستخدم "www-data" يمكنه الوصول إلى شهادات CA وشهادات العميل.


/* SSL Configuration */

$cfg['Servers'][$i]['ssl'] = true;

$cfg['Servers'][$i]['ssl_key'] = '/opt/mysql/certs/client-key.pem';

$cfg['Servers'][$i]['ssl_cert'] = '/opt/mysql/certs/client-cert.pem';

$cfg['Servers'][$i]['ssl_ca'] = '/opt/mysql/certs/ca.pem';

/* Disable SSL Verification for Self-signed certificates */

/* The Good: Connection between phpMyAdmin and MySQL Server are Encrypted */

/* But you're still vulnerable with the MiTM */

$cfg['Servers'][$i]['ssl_verify'] = false;

/* Hide Some Databases */

$cfg['Servers'][$i]['hide_db'] = '(information_schema|performance_schema|sys|mysql)';


احفظ وأغلق.


قم بتغيير ملكية المجلد "phpMyAdmin" إلى "www-data" للمستخدم.


sudo chown -R www-data:www-data /var/www/html/phpMyAdmin


تم الانتهاء من تثبيت وتهيئة phpMyAdmin لـ phpMyAdmin.





سجّل الدخول الآن إلى MySQL Server وتحقق من حالة MySQL SSL ، وأنشئ قاعدة بيانات جديدة ومستخدمًا لـ phpMyAdmin.


سجّل الدخول إلى MySQL Server باستخدام الأمر التالي.


mysql -u root -P 8329 -p


تحقق من حالة SSL باستخدام الاستعلامات التالية.


SHOW VARIABLES LIKE '%ssl%';

STATUS


ستحصل على النتيجة التالية.




خادم MySQL يعمل مع تمكين SSL عليه ، ويستخدم شهادات SSL التي أنشأناها. 

نحن أيضًا متصلون بخادم MySQL Server من خلال اتصال SSL الآمن باستخدام الملف  "~ / .my.cnf".


قم بإنشاء قاعدة بيانات جديدة ومستخدم باسم 'phpmyadmin' باستخدام الاستعلام التالي.


CREATE DATABASE phpmyadmin;

CREATE USER 'phpmyadmin'@'%' IDENTIFIED WITH mysql_native_password BY 'phpMyAdminAdmn352#$';

GRANT ALL PRIVILEGES ON *.* TO 'phpmyadmin'@'%' WITH GRANT OPTION;

FLUSH PRIVILEGES;


اكتب ' exit ' لتسجيل الخروج من MySQL Shell.




افتح الآن متصفح الويب الخاص بك واكتب عنوان IP للخادم بمسار "phpMyAdmin" على شريط العناوين.


http://server-ip/phpMyAdmin/


في صفحة تسجيل الدخول إلى phpMyAdmin اكتب المستخدم "phpmyadmin" بكلمة المرور التي أنشأناها وانقر فوق الزر "GO".





And you will get the phpMyAdmin Dashboard as below.

وستحصل على لوحة تحكم phpMyAdmin على النحو التالي.






تم الانتهاء من تثبيت وإعداد phpMyAdmin.


إنشاء مستخدم MySQL وقاعدة بيانات


اتصل بخادم MySQL وتحقق من حالة الاتصال


للاتصال بخادم MySQL يمكنك استخدام سطر أوامر "mysql".

بشكل افتراضي ستستخدم جميع الاتصالات من MySQL Server المحلي Unix socke  والذي لا يجعل اتصال SSL الاتصالات أكثر أمانًا.


اتصل بخادم MySQL Server بالإعدادات الافتراضية باستخدام الأمر التالي.


mysql -u username -p


إذا كان خادم MySQL الخاص بك يعمل على المنفذ المخصص فاستخدم خيار "-P port".


mysql -u root -P 8320 -p


إذا كان خادم MySQL يعمل على الشبكة المحلية باستخدام المنفذ المخصص ، فاستخدم الخيارين "h host / IP Address" و "-P port".


mysql -u root -h 172.16.0.3 -P 8320 -p


بمجرد الاتصال بخادم MySQL ، قم بتشغيل الاستعلام التالي للتحقق من حالة الاتصال.


STATUS


ستحصل على النتيجة التالية.





أنت متصل بخادم MySQL بنجاح.


إنشاء وعرض قاعدة البيانات


بعد الاتصال بـ MySQL shell ستتعلم كيفية إنشاء قاعدة بيانات MySQL ، واختيار قاعدة البيانات ، وإنشاء الجداول ، وإدخال البيانات.


لإنشاء قاعدة بيانات MySQL جديدة استخدم الاستعلام التالي.


CREATE DATABASE hakase_db;

CREATE DATABASE yume_db;

CREATE DATABASE juice_db;


تحقق الآن من جميع قواعد بيانات القائمة على خادم MySQL باستخدام الاستعلام التالي.


SHOW DATABASES;

SHOW DATABASES LIKE "%db%";





يمكنك تبديل قاعدة البيانات وتحديدها باستخدام الاستعلام التالي.


USE hakase_db;


يمكنك إنشاء جدول جديد في قاعدة البيانات الخاصة بك باستخدام استعلام "CREATE TABLE".


CREATE TABLE users (first VARCHAR(20), last VARCHAR(20),

        email VARCHAR(20), birth DATE, country VARCHAR(20));


يمكنك استخدام "DESCRIBE table-name" للتحقق من جميع الحقول في قاعدة البيانات الخاصة بك.


DESCRIBE users;


وستحصل على جميع حقول التفاصيل في جدول "users".





يمكنك إدخال البيانات يدويًا إلى جدولك باستخدام استعلام "INSERT".


INSERT INTO users

       VALUES ('Mark','Mine','mmine@gmail.com','1999-03-20','Canada');


لقد نجحت الآن في إدراج البيانات في قاعدة بيانات MySQL.

تحقق من جميع البيانات الموجودة في الجدول باستخدام استعلام "SELECT".


SELECT * FROM users;

SELECT email, birth, country FROM users;


وستحصل على جميع البيانات.





إنشاء مستخدم MySQL


يتم استعلام MySQL الأساسي لإنشاء مستخدم باستخدام استعلام "CREATE USER".

يمكنك منح صلاحيات قاعدة البيانات للمستخدم الخاص بك باستخدام الأمر "GRANT" الذي يليه من خلال خياراته. والأخير يجب إعادة تحميل جداول المنح لتطبيق التغييرات الجديدة.


قم بإنشاء مستخدم جديد باسم ' hakase @ localhost ' بكلمة المرور 'MyHakasePasswordMySQL39 ==' والسماح لجميع امتيازات 'hakase_db' للمستخدم باستخدام الاستعلام التالي.


CREATE USER 'hakase'@'localhost' IDENTIFIED BY 'MyHakasePasswordMySQL39==';

GRANT ALL PRIVILEGES ON hakase_db.* TO 'hakase'@'localhost' WITH GRANT OPTION;

FLUSH PRIVILEGES;


اسم المضيف " user @ localhost " هو جزء من اسم الحساب.

يسمح "localhost" للمستخدم بالاتصال من الخادم المحلي فقط.

إذا لم يتم ادخاله فإن القيمة الافتراضية هي "٪" والتي تسمح للمستخدمين من كل مكان.




أنشاء مستخدمًا للوصول عن بُعد باستخدام Authentication Plugin محددة.


سننشئ مستخدمًا جديدًا يمكنه فقط تسجيل الدخول من عنوان IP للمضيف المحدد واستخدامAuthentication Plugin الخاصة.


سننشئ مستخدمًا جديدًا باسم "yume" يتصل عبر عنوان IP للعميل "172.16.0.4" باستخدام المكون الإضافي للمصادقة "mysql_native_password" ، وسيسمح للمستخدم بالوصول إلى قاعدة البيانات "yume_db" فقط.


CREATE USER 'yume'@'172.16.0.4' IDENTIFIED WITH mysql_native_password BY 'MyYumePasswordMySQL39==';

GRANT ALL PRIVILEGES ON yume_db.* TO 'yume'@'172.16.0.4' WITH GRANT OPTION;

FLUSH PRIVILEGES;


المستخدم "yume" سيتصل فقط بخادم MySQL بعنوان IP "172.16.0.4". خلاف ذلك ، سيرفض خادم MySQL مصادقة المستخدم.




إنشاء مستخدم وإجبار استخدام اتصال SSL مشفر


لإجبار المستخدم على استخدام اتصال SSL الآمن يمكنك استخدام خيار "REQUIRE SSL".

إذا فشل الاتصال الآمن لا يمكن الاتصال بخادم MySQL (لا يمكن إنشاء الاتصالات).


للحصول على سيناريو أكثر أمانًا يمكنك استخدام استعلام "REQUIRE X509" ، مما يعني أن الاتصال بخادم MySQL يتم إنشاؤه فقط عندما يقدم المستخدم / جهاز العميل شهادات CA والعميل.


أنشئ مستخدمًا جديدًا باسم "juice" باسم المضيف "٪". 

يسمح خيار اسم المضيف "٪" للمستخدم "juice" بالاتصال من أي عنوان IP ، ولكن سيتم إنشاء الاتصال عندما يوفر جهاز العميل شهادات العميل وشهادة CA.


CREATE USER 'juice'@'%' IDENTIFIED WITH mysql_native_password BY 'MyJuicePasswordMySQL39==' REQUIRE X509;

GRANT ALL PRIVILEGES ON juice_db.* TO 'juice'@'%' WITH GRANT OPTION;

FLUSH PRIVILEGES;





إظهار كل المستخدمين و Grants


تحقق من جميع المستخدمين باستخدام الاستعلامات التالية.


SELECT User, Host FROM mysql.user;

SELECT User, Host, plugin FROM mysql.user;


ستحصل الآن على تفاصيل المستخدم والمضيف ومكونات المصادقة الإضافية التي يستخدمها المستخدمون.





بعد ذلك ، تحقق من جميع صلاحيات المستخدمين باستخدام استعلام "SHOW GRANTS" على النحو التالي.


SHOW GRANTS FOR 'hakase'@'localhost';

SHOW GRANTS FOR 'yume'@'172.16.0.3';

SHOW GRANTS FOR 'juice'@'%';


الآن سوف تحصل على صلاحيات مفصلة لمستخدميك.




إنشاء نسخة احتياطية (Incremental Backup)  لقاعدة بيانات MySQL


ستتعلم الاستخدام الأساسي لأمر mysqldump للنسخ الاحتياطي لجميع قواعد بيانات MySQL.

يتيح لك سطر الأوامر "mysqldump" إجراء نسخ احتياطي لكافة قواعد البيانات وقواعد البيانات المحددة أو المتعددة وجداول النسخ الاحتياطي.


قم بإنشاء مجلد النسخ الاحتياطي وانتقل إليه.


mkdir -p ~/backup; cd ~/backup


وأنت على استعداد لإنشاء نسخ احتياطي لقواعد بيانات MySQL باستخدام الأداة المساعدة "mysqldump".


نسخ احتياطي لكافة قواعد البيانات


لنسخ جميع قواعد البيانات احتياطيًا على خادم MySQL ، استخدم الأمر mysqldump مع خيار "--add-databases".


mysqldump -u root -P 8320 --all-databases -p > alldbs.sql


ستحصل على جميع النسخ الاحتياطية لقواعد البيانات الخاصة بك إلى ملف SQL واحد يسمى "alldbs.sql".


نسخ احتياطي لقاعدة بيانات محددة


لعمل نسخة احتياطية من قاعدة بيانات MySQL المحددة ، قم بتضمين اسم قاعدة البيانات الخاصة بك في الأمر mysqldump.


mysqldump -u root -P 8320 -p hakase_db > backup_hakase_db.sql


نتيجة لذلك ، سوف تحصل على ملف النسخ الاحتياطي SQL من قاعدة البيانات 'hakase_db' المسماة 'backup_hakase_db.sql' في دليل النسخ الاحتياطي.


نسخ احتياطي لقواعد بيانات متعددة


If you want to create a backup of multiple databases (not all databases on the MySQL Server), use the '--databases' option below.

إذا كنت ترغب في إنشاء نسخة احتياطية من قواعد بيانات متعددة (وليس كل قواعد البيانات على MySQL Server) ، فاستخدم خيار "--databases".


mysqldump -u root -P 8320 -p --databases yume_db juice_db > multi-db-once.sql


تم إنشاء ملف النسخ الاحتياطي لقاعدتي البيانات "yume_db" و "juice_db" ، باسم ملف "multi-db-once.sql".





النسخ الاحتياطي التلقائي

لإعداد نسخة احتياطية تلقائية لـ MySQL سنستخدم نظام Linux cron.

سننشئ سكربت bash جديدًا لقواعد بيانات MySQL ونشغلها تلقائيًا في وقت محدد باستخدام Linux Cron.


قم بتسجيل الدخول إلى MySQL shell باستخدام الأمر التالي.


mysql -u root -P 8320 -p


قم بإنشاء مستخدم نسخ احتياطي جديد مع بعض الامتيازات باستخدام الاستعلام التالي.


CREATE USER 'backup'@'localhost' IDENTIFIED WITH mysql_native_password BY 'MyBackupPasswordMySQL39==';

GRANT PROCESS, SELECT, LOCK TABLES, SHOW VIEW, EVENT ON *.* TO 'backup'@'localhost' WITH GRANT OPTION;

FLUSH PRIVILEGES;


اكتب الآن 'exit' لتسجيل الخروج.




قم بإنشاء مجلد نسخ احتياطي جديد "/ opt / backup / mysql" لتخزين جميع ملفات النسخ الاحتياطي لقاعدة البيانات.


mkdir -p /opt/backup/mysql


انتقل إلى المجلد '/ usr / local / sbin' وأنشئ ملف bash جديدًا باسم auto_backup.sh باستخدام محرر vim.


cd /usr/local/sbin/

vim auto_backup.sh


قم بتغيير تفاصيل المستخدم وكلمة المرور والمنفذ الخاص  بك والصق الاعدادات فيه.


#!/bin/bash

# Basic configuration: datestamp e.g., YYYYMMDD

DATE=$(date +"%Y%m%d")

# Location of your backups (create the directory first!)

BACKUP_DIR="/opt/backup/mysql"

# MySQL login details

MYSQL_USER="backup"

MYSQL_PASSWORD="MyBackupPasswordMySQL39=="

# MySQL executable locations (no need to change this)

MYSQL=/usr/bin/mysql

MYSQLDUMP=/usr/bin/mysqldump

# MySQL databases you wish to skip

SKIPDATABASES="Database|information_schema|performance_schema|mysql"

# Number of days to keep the directories (older than X days will be removed)

RETENTION=14

# ---- DO NOT CHANGE BELOW THIS LINE ------------------------------------------

#

# Create a new directory into the backup directory location for this date

mkdir -p $BACKUP_DIR/$DATE

# Retrieve a list of all databases

databases=`$MYSQL -u$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "($SKIPDATABASES)"`

# Dumb the databases in seperate names and gzip the .sql file

for db in $databases; do

echo $db

$MYSQLDUMP --opt --user=$MYSQL_USER -p$MYSQL_PASSWORD --skip-lock-tables --events --databases $db | gzip > "$BACKUP_DIR/$DATE/$db.sql.gz"

done

# Remove files older than X days

find $BACKUP_DIR/* -mtime +$RETENTION -delete


احفظ وأغلق.


الآن اجعل البرنامج النصي "auto_backup.sh" قابلاً للتنفيذ (executable) وقم بتشغيل الـ script للاختبار.


chmod +x auto_backup.sh

./auto_backup.sh




ستحصل على ملفات النسخ الاحتياطي لقاعدة البيانات الخاصة بك في المجلد "/ opt / mysql / backup-current-date". 

تحقق باستخدام الأمر التالي.


ls -lah /opt/backup/mysql/

ls -lah /opt/backup/mysql/datedir/


ستحصل على النتيجة التالية.




ستحصل على ملفات مضغوطة من نسخة احتياطية لقاعدة البيانات.


بعد ذلك ، أنشئ cronjob جديدًا سيشغل "auto_backup.sh" كل يوم في الوقت "00: 00".


Set the default editor to 'vim' and create a new cronjob as user root using the following command.

اضبط المحرر الافتراضي على "vim" وأنشئ cronjob جديدًا كمستخدم root .


export EDITOR=vim

crontab -u root -e


Now paste the following configuration into it.

الآن قم بلصق التكوين التالي فيه.


0 0 * * * sh /usr/local/sbin/auto_backup.sh


Save and close.

احفظ وأغلق.


The new cronjob for user root has been created. Check all cronjob list for the root user using the following command.

تم إنشاء cronjob الجديد لجذر المستخدم. تحقق من كل قائمة cronjob للمستخدم الجذر باستخدام الأمر التالي.


crontab -u root -l


وستحصل على تفاصيل إعدادات cron للمستخدم root .



google-playkhamsatmostaqltradent