docs:dba_basic

بدهيات إدارة قواعد البيانات

<note warning> هذه الصفحة لا تزال قيد الإنشاء </note>

<note> قد تحب أن تراجع مقالتنا السابقة بدهيات استعلامات SQL مع قواعد بيانات Sqlite </note>

قواعد بيانات SQLite

إنشاء قاعدة بيانات sqlite هو مجرد اتصال على ملف غير موجود في مجلد لك صلاحيات الكتابة فيه. أما إدارتها فهي أيضا بذات السهولة فهي ملفات تديرها كما تدير أي ملف على النظام من خلال صلاحيات الملف للمالك والمجموعة المالكة والبقية.

قواعد بيانات MySQL

الإعداد والاستهلال

بعد تثبيت حزمة خادم mysql وقبل تشغيل الخادم لأول مرة يفضل أن تراجع ملف الإعدادات وهو /etc/my.cnf احتفظ بنسخة منه قبل أن تشرع بتعديله. الإعدادات الإفتراضية لا تفعل الكثير من الكاش فهي تناسب خادوم له مواصفات متواضع وحجم ذاكرة رام محدود جدا. ستجد إعدادات بديلة في مجلد /usr/share/doc/mysql-server-X.Y.Z/ مثل

  • my-large.cnf
  • my-huge.cnf
  • my-innodb-heavy-4G.cnf

القالب يحتوي العديد من التعليقات قد تحب أن تقرأه.

بعد ذلك يمكنك تشغيله عليه الأمر

service mysqld start

أو

systemctl start  mysqld.service

إن كانت إعداداتك تفوق قدرة جهازك قم بمراجعة my.cnf والعودة لإعدادات أقل ثم جرب مجددا في أسوأ الأحواب قد تضطر أن تحذف مجلد /var/lib/mysql/ ثم تنفذ الأمر

/usr/libexec/mysqld-prepare-db-dir

يمكنك تعيين كلمة السر الخاصة بإدارة خادم قواعد البيانات عبر الأمر وضعها غير كلمة سر المستخدم الجذر لنظام التشغيل

mysqladmin -u root password

والأفضل أن تنفذ الأمر mysql_secure_installation والذي يعمل على ما يلي:

  • تعيين كلمة السر للمدير قاعدة البيانات root
  • إزالة كل المستخدمين الآخرين ذوي الصلاحيات المطلقة والذين يمكنهم الولوج عنبعد
  • إزالة صلاحيات المجاهيل
  • إزالة قاعدة البيانات test والتي يسمح بالولوج إليها لكل المستخدمين

الاتصال بقاعدة البيانات

اكتب الأمر التالي للاتصال للتصال بقاعدة البيانات عبر unix file socket وهو الملف /var/lib/mysql/mysql.sock وليس عبر tcp/ip

mysql -u root

إن كنت قد حددت كلمة سر يمكنك إضافة الخيار p ثم كلمة السر دون مسافة أو تركها حتى يسألك عنها هكذا

mysql -u root -p

للاتصال عبر tcp/ip استعمل الخيار -h ثم العنوان هكذا

mysql -u root -p -h localhost

إذا كنت تتصل لتنفيذ استعلام واحد يمكنك تمريره بالخيار e أو تمريره عبد المدخلات القياسية عبر أنبوب | من echo أو cat أو عبر تحديد المدخلات بعلامة أقل من.

إنشاء قاعدة بيانات جديدة

CREATE DATABASE my_test_db;
CREATE DATABASE my_test_db DEFAULT CHARACTER SET = utf8;

ولعرض قواعد البيانات الموجودة نكتب

SHOW DATABASES;

انظر

إنشاء وعرض الجداول

مثال على إنشاء جدول

CREATE TABLE users (
  id         INTEGER     NOT NULL PRIMARY KEY AUTO_INCREMENT,
  name       VARCHAR(64) NOT NULL,
  phone      VARCHAR(64) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

ولعرض الجداول

SHOW TABLES;

إدارة صلاحيات الوصول

لإنشاء مستخدم ادخل بصفة إدارية root ثم استعمل الأمر create user هكذا

CREATE USER 'ahmad' IDENTIFIED BY 'password';

هنا عملنا مستخدم اسمه ahmad على أي عنوان IP (عدا ال localhost عبر unix socket) وهو يكافئ الأمر

CREATE USER 'ahmad'@'%' IDENTIFIED BY 'password';

يمكنك اشتراط أو تحديد العنوان المستخدم في الدخول وهذا مفيد عندما تريد التراخي في كلمة السر عندما يكون الاتصال محليا (من يملك وصول لكامل الخادم فإنه إما موثوق أو تأخر الأمر فالغريق لا يخشى البلل)

CREATE USER 'localuser'@'localhost' IDENTIFIED BY 'password';

<note> عندما نقول من كل عنوان % فإن هذا لا يشمل unix socket وهو localhost. </note>

يمكن منح الصلاحيات للمستخدم عبر GRANT وأشهر مثال هو GRANT ALL و GRANT SELECT وتعنيان اسمح له بكل شيء والثانية باستعلامات القراءة فقط.

GRANT ALL ON my_test_db.* TO 'ahmad';
GRANT SELECT ON *.* TO 'ali'@'localhost';

النسخ الاحتياطي والاسترجاع

  • mysqldump

إدارة مساحة التخزين

إذا كنت قد فعلت binary logs ووجدت أنها تستهلك مساحة القرص يمكنك حذف البيانات قبل تاريخ معين عبر الأمر

PURGE BINARY LOGS BEFORE '2014-07-15';

والأفضل تحديد القيم المناسبة في ملف my.cnf

expire_logs_days        = 10
max_binlog_size         = 100M

قواعد بيانات MariaDB

  • كلمة عنها
  • كلمة عن محركات التخزين

قواعد بيانات PostgreSQL

تمهيد

قواعد PostgreSQL هي الأقوى دون منازع في عالم البرمجيات مفتوحة المصدر وهي تتفوق على MySQL و MariaDB في العديد من الأمور.

التثبيت

في فيدورا (ومثيلاتها كريدهات وسنتوس) ثبت حزمة الوكيل client واسمها postgresql وحزمة الخادم وإضافاته هما postgresql-server و postgresql-contrib

yum install postgresql-server postgresql-contrib postgresql

في ديبيان (وأوبنتو ومنت) اسم حزمة الوكيل هو postgresql-client واسم حزمة الخادم وإضافاته هو postgresql و postgresql-contrib

apt-get install postgresql postgresql-contrib postgresql-client

الاستهلال

في فيدورا يوجد ملف يشرح لك ويساعدك موجود في المسار (مع تعديل الرقم ) قد تحب أن تتصفحه

rpm -q postgresql
less /usr/share/doc/postgresql-9.2.5/README.rpm-dist

الطريقة باختصار هي أن تكتب الأمر بصلاحيات الجذر

postgresql-setup initdb

هذا الأمر يستهل مجلد يحتوي إعدادات خادم PostgreSQL وبياناته الأساسية. هذا المجلد هو /var/lib/pgsql/

cd /var/lib/pgsql/
ls
ls data
less data/postgresql.conf

قد يختلف المسار من توزيع إلى أخرى وقد يعمل له روابط في أكثر من مكان. مسار ملف الإعدادات في أوبنتو هو داخل /etc/postgresql/current/main/.

داخل ملف postgresql.conf ستجد الكثير من التعليقات الإرشادية. أهم الخيارات التي قد تحتاج تغييرها

  • listen_addresses
  • max_connections

يمكنك تركها كما هي الآن.

لتشغيل الخادم في الأنظمة التي تعتمد systemd نستعمل systemctl هكذا

systemctl start postgresql

وليعمل تلقائيا عند إعادة تشغيل الجهاز نكتب

systemctl enable postgresql

ويمكنك استعمال service أو /etc/init.d كالمعتاد في التوزيعات الأخرى. مثلا لتشغيله في أوبنتو اكتب

/etc/init.d/postgresql start

من ملفات الإعدادات الأخرى التي نتجت من عملية الاستهلال وهما يتعلقان بطريقة الوثوق بالمستخدمين

  • pg_hba.conf
  • pg_ident.conf

استعمال الوكيل

اسم وكيل خادم postgresql هو psql. وهناك مستخدم على نظام التشغيل يثق به الخادم عند الاتصال عبر ملف المقبس unix file socket وليس عبر TCP/IP اسم هذا المستخدم (على الأقل في فيدورا وأوبنتو) هو postgres. لذا يمكنك تشغيل الوكيل بالأمر التالي

su postgres -c psql
sudo -u postgres psql

وسيظهل على شاشتك شيء يشبه هذا

could not change directory to "/root"
psql (9.2.5)
Type "help" for help.

postgres=# help
You are using psql, the command-line interface to PostgreSQL.
Type:  \copyright for distribution terms
       \h for help with SQL commands
       \? for help with psql commands
       \g or terminate with semicolon to execute query
       \q to quit

تبدأ أوامر psql بعلامة الشرطة المائلة الخلفية \ ثم حرف أو كلمة ومن أهمها

  • ? عرض مساعدة عن أوامر PostgreSQL مثل هذه
  • h عرض مساعدة عن لغة SQL
  • l سرد كل قواعد البيانات (ويمكن أن تلحقها ب + لمزيد من التفاصيل)
  • d عرض كل الجداول والفهارس …
    • dt عرض كل الجداول
    • ألحقها ب + لعرض المزيد من التفاصيل كذلك أتبعها باسم الجدول لتحديده
  • c أو connect للاتصال بقاعدة بيانات جديدة وتأخذ المعاملات التالية على الترتيب
    • اسم قاعدة البيانات أو -
    • اسم المستخدم أو -
    • اسم العائل host أو -
    • رقم المنفذ
  • conninfo عرض معلومات عن الاتصال الحالي
  • password تغيير كلمة سر المستخدم (الحالي أو المذكور بعدها)
  • cd
  • prompt متبوعة بسؤال واسم المتغيّر
  • set تعرض كل المتغيرات أو تغير قيمتها إن تبعناها باسم المتغير وقيمته
  • i متبوعة باسم ملف تقرأ الأوامر من ذاك الملف
  • o تحديد ملف المخرجات
  • e لتحرير الاستعلام في محرر خارجي مثل vim
  • g لتنفيذ الاستعلام (أو ;)

أوامر وبرنامج

تأتي حزمة الوكيل بعدد من البرامج التي تثبت في النظام منها

  • createdb لإنشاء قاعدة بيانات
  • dropdb لحذف قاعدة البيانات
  • createuser لإنشاء مستخدم
  • dropuser لحذف المستخدم
  • pg_dump يلقي محتويات قاعدة البيانات إلى ملف ويستخدم لأخذ نسخة احتياطية
    • Fc نوع خاص من المخرجات كبديل للمخرجات النصية
    • t متبوع باسم الجدول أو نمط الجداول المطلوب إخراجها
    • T متبوع باسم الجدول أو نمط الجداول المطلوب *عدم* إخراجها
    • s إخراج الهكيل العام أي دون بيانات.
    • c أي clean وتستخدم في المخرجات النصية لإضافية ما يفرغ محتويات قاعدة البيانات القديمة
  • pg_dumpall
  • pg_restore لاستعادة نسخة احتياطية غير نصية
  • vacuumdb لتحرير مساحات القرص التي لا تزال محجوزة
  • reindexdb

فلنبدأ بعمل مستخدم

تذكر مستخدم قاعدة البيانات الذي يوافق اسمه اسم مستخدم نظام التشغيل لا يطلب منه تقديم كلمة سر وهذا هو السبب الذي يسمح لنا بالدخول عبر sudo أو su دون كتابة كلمة سر. طريقة الوثوق هذه تسمى peer وتعني أن قاعدة البيانات تثق فيمن يثق به نظام التشغيل.

إذا كان اسم معرفك هو ahmad فلنعمل مستخدم لقاعدة البيانات باسمه وقاعدة بيانات بنفس الاسم ونجعله مالكا لها (عبر O أي owner)

sudo -u postgres createuser ahmad
sudo -u postgres createdb -O ahmad ahmad

جرب الآن الدخول بمجرد كتابة psql كما في هذه الجلسة.

[ahmad@localhost ~]$ psql
psql (9.2.5)
Type "help" for help.

ahmad=> \conninfo
You are connected to database "ahmad" as user "ahmad" via socket in "/var/run/postgresql" at port "5432".

<note warning> إذا كان لديك تطبيق ويب بلغة php يعمل بصلاحيات مستخدم النظام apache وقمت تكاسلا بعمل مستخدم لقاعدة البيانات اسمه apache فإن من يتمكن من حقن كود php عبر eval مثلا سيتمكن من الوصول لقاعدة البيانات دون كلمة سر. </note>

حتى ندخل باسم مستخدم وكلمة سر تأكد من تفعيل الدخول عبر طريقة اسمها md5 من خلال تحرير ملف pg_hba.conf الذي تحدثنا عنه. أضف السطرين التاليين إن لم يكونا موجودين

local   all             all                                     md5
host    all             all             127.0.0.1/32            md5

يمكنك السماح لعناوين أخرى الدخول عبر الشبكة إن كان يلزمك من خلال سطر إضافي من نوع host مع العنوان الذي تريده أو 0.0.0.0/0 لكل العناوين.

الآن أعد تشغيل قاعدة البيانات وجرب وأنت مستخدم عادي (اسمه أحمد في مثالنا) الدخول باسم postgres الذي غيرنا كلمة سره في أول المقال.

psql -U postgres -h localhost

انظر

إدارة صلاحيات الوصول

عند عمل قاعدة البيانات لاحظ تمرير O لتحديد مالكها. يمكنك إدارة صلاحيات الوصول عبر GRANT كما شرحنا في أول المقالة عن mysql للمزيد من المعلومات اكتب

sudo -u postgres psql -c '\h grant'

مثلا

GRANT SELECT ON DATABASE mydb TO myuser;
GRANT ALL ON DATABASE mydb TO otheruser;

للمزيد انظر

نقاش

vrptcfgiq, 2015/04/25 04:33

بدهيات إدارة قواعد البيانات [أعجوبة] vrptcfgiq http://www.g55tz9783mnnf86b5yq50mgl7a63ir45s.org/ [url=http://www.g55tz9783mnnf86b5yq50mgl7a63ir45s.org/]uvrptcfgiq[/url] <a href=“http://www.g55tz9783mnnf86b5yq50mgl7a63ir45s.org/”>avrptcfgiq</a>

أدخل تعليقك:
 
آخر تعديل:: 23 نيسان 2015 الساعة 00:19 (تحرير خارجي)