جدول المحتويات
بدهيات إدارة قواعد البيانات
قواعد بيانات 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';
%
فإن هذا لا يشمل unix socket وهو localhost.
يمكن منح الصلاحيات للمستخدم عبر 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".
حتى ندخل باسم مستخدم وكلمة سر تأكد من تفعيل الدخول عبر طريقة اسمها 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;
للمزيد انظر