Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
ЛабРаб.docx
Скачиваний:
2
Добавлен:
01.04.2025
Размер:
2.87 Mб
Скачать

2. Пример выполнения практической части

Разработаем комплекс мер для подготовки к возможному сбою базы данных MySQL.

Пункт #1 «проверка таблиц при загрузке системы»

Так как для загрузки демона MySQL используется «rc.d» системы Ubuntu Server, то логично было бы, встроить проверку таблиц в скрипт «/etc/rc.d/mysql» это также даcт возможность вынести нужные опции проверки в главный конфигурационный файл - /etc/rc.conf.

Конечно, можно не встраивать проверку таблиц в стартовый скрипт «/etc/rc.d/mysql», помня то - что «/etc/rc.d/mysql» просто запускает другой скрипт «mysqld_safe», а тот в свою очередь уже имеет нужные строчки по проверке таблиц их только нужно найти и раскомментировать.

Пример: «/etc/rc.d/mysql»:

4 #!/bin/sh

5 # PROVIDE: mysql

6 # REQUIRE: NETWORKING SERVERS

7 # BEFORE: DAEMON

8 # KEYWORD: FreeBSD

9 #

10 # Add the following line to /etc/rc.conf to enable mysql:

11 # mysql_enable (bool): Set to "NO" by default.

12 # Set it to "YES" to enable MySQL.

13 # mysql_limits (bool): Set to "NO" by default.

14 # Set it to yes to run `limits -e -U mysql`

15 # just before mysql starts.

16 # mysql_dbdir (str): Default to "/var/db/mysql"

17 # Base database directory.

18 # mysql_args (str): Custom additional arguments to be passed

19 # to mysqld_safe (default empty).

20 #

21 . /etc/rc.subr

22 name="mysql"

23 rcvar=`set_rcvar`

24 load_rc_config $name

25 : ${mysql_enable="NO"}

26 : ${mysql_limits="NO"}

27 : ${mysql_dbdir="/var/db/mysql"}

28 : ${mysql_args=""}

29 : ${mysql_myisamck="NO"}

30 : ${mysql_myisamck_args="-s -C"}

31 : ${mysql_myisamck_mail_subj="MySQL databases include error!!!"}

32 : ${mysql_myisamck_mail_toaddr="root@localhost"}

33 myisamchk_path="/usr/local/bin/myisamchk"

34 mysql_user="mysql"

35 mysql_limits_args="-e -U ${mysql_user}"

36 pidfile="${mysql_dbdir}/`/bin/hostname`.pid"

37 command="/usr/local/bin/mysqld_safe"

38 command_args="--defaults-extra-file=${mysql_dbdir}/my.cnf --user=${mysql_user} --datadir=${mysql_dbdir} --pid-file=${pidfile} ${mysql_args} > /dev/null &"

39 procname="/usr/local/libexec/mysqld"

40 start_precmd="${name}_prestart"

41 mysql_install_db="/usr/local/bin/mysql_install_db"

42 mysql_install_db_args="--ldata=${mysql_dbdir}"

43 mysql_create_auth_tables()

44 {

45 eval $mysql_install_db $mysql_install_db_args >/dev/null

46 [ $? -eq 0 ] && chown -R ${mysql_user}:${mysql_user} ${mysql_dbdir}

47 }

48 mysql_prestart()

49 {

50 if [ ! -d "${mysql_dbdir}/mysql/." ]; then

51 mysql_create_auth_tables || return 1

52 fi

53 if checkyesno mysql_limits; then

54 eval `/usr/bin/limits ${mysql_limits_args}` 2>/dev/null

55 fi

56 if checkyesno mysql_myisamck; then

57 echo "Start verification MySQL databases..."

58 SAVE_IFS="$IFS"

59 IFS=""

60 errmes=`eval ${myisamchk_path} ${mysql_myisamck_args} ${mysql_dbdir}/*/*.MYI`

61 IFS="$SAVE_IFS"

62 echo "End verification MySQL databases."

63 if [ "$errmes" ]; then

64 echo "$errmes" | /usr/bin/mail -s "${mysql_myisamck_mail_subj}" "${mysql_myisamck_mail_toaddr}"

65 fi

66 return 0

67 fi

68 }

69 run_rc_command "$1"

Строчки "29-32" это задание значений по умолчанию для опций, которые можно прописать в файле «/etc/rc.conf» и с их помощью управлять поведением «myisamchk».

mysql_myisamck

Может принимать значения YES или NO. Если значение YES то пред запуском «mysqld» будет проходить проверка всех таблиц в «каталоге данных».

mysql_myisamck_args

Строка аргументов, которые будут переданы утилите «myiasmchk». По умолчанию заданы аргументы «-s -C». «-s» - обозначает работу в «тихом» режиме то есть на STDOUT будет выводиться информация, только в случае если в таблицах будет найдена ошибка. «-С» обозначает, что проверка будет происходить только тех таблица в которых были изменения после последней проверки.

mysql_myisamck_mail_subj

Текстовая строка, которая будет темой в письме уведомлении, которое будет отправляться, в случае если в таблицах будет найдена ошибка.

mysql_myisamck_mail_toaddr

Адрес электронной почты, куда будет послано письмо уведомление.

Строка "33" задает путь к утилите «myisamchk».

Строки "56-67" собственно и есть код проверки таблиц и отправки письма в случае нахождения ошибок в таблицах.

Пункт #2 «проверка таблиц по расписанию во время работы сервера»

Реализовать пункта #2 можно разными способами - написать свой скрипт проверки таблиц, в «crontab» прописать расписание выполнения этого скрипта.

Пункт #3 «создание резервных копий БД.

Для реализации пункта #3 будем использовать описанную выше утилиту «mysqldump». и как для пункта будет написан небольшой скрипт, который будет реализовывать следующие действия:

  • вызывать «mysqldump» для создания копии всех баз данных с обязательным обнулением «журнала обновлений»

  • созданная копия БД будет сжиматься с помощью «tar».

  • администратору будет высылаться на электронную почту уведомление, содержащее отчет о выполненных действиях и дополнительную информацию.