Назад | Перейти на главную страницу

Как я могу оценить размер бинарного журнала и должны ли бинлоги находиться на отдельном диске?

Мы собираемся настроить репликацию MySQL Master-Slave в нашей производственной базе данных. Мы намерены запускать резервное копирование с ведомого устройства (в настоящий момент наш мастер отключается на 15 минут каждый день, пока выполняется резервное копирование, что переводит наш веб-сайт в автономный режим).

Как я могу оценить, насколько быстро будет расти журнал бункера? Какая еще информация потребуется?

Наш главный сервер базы данных MySQL в настоящее время имеет 4 диска SAS по 15 КБ в RAID 10.

Стоит ли мне подумать о добавлении отдельного массива RAID 1 (2 диска) для хранения журналов корзины? Я обеспокоен тем, что запись в журнал bin замедлит чтение и запись в основное хранилище данных mysql.

Есть два способа выяснить это

ПРИМЕР №1

Предположим, двоичные журналы определены следующим образом:

[mysqld]
log-bin=mysql-bin

Заходим в ОС и делаем так:

cd /var/lib/mysql
ls -lt --time=access --time-style=+"%s" mysql-bin.* | awk '{print $7,$6}'

Это покажет вам двоичные журналы и их соответствующие временные метки UNIX.

Просто вычтите одну метку времени из предыдущей

ls -l mysql-bin.0*
-rw-rw---- 1 mysql mysql 1073754057 Mar 25 18:27 mysql-bin.000630
-rw-rw---- 1 mysql mysql 1074289363 Mar 25 22:16 mysql-bin.000631
-rw-rw---- 1 mysql mysql 1073746572 Mar 26 07:20 mysql-bin.000632
-rw-rw---- 1 mysql mysql  747478886 Mar 26 11:31 mysql-bin.000633

ls -l --time=access --time-style=+"%s" mysql-bin.* | awk '{print $7,$6}'
mysql-bin.000630 1364250429
mysql-bin.000631 1364264182
mysql-bin.000632 1364296842
mysql-bin.000633 1364311833

Что можно посчитать?

  • Время для mysql-bin.000631 составляет 13753 сек (1364264182 - 1364250429), 3:49:53
  • Время для mysql-bin.000632 составляет 32660 секунд (1364296842 - 1364264182), 9:04:20
  • Время для mysql-bin.000633 составляет 14991 сек (1364311833 - 1364296842), 4:09:51

Вам нужно будет записать эти вычисления для каждого бинлога.

ПРИМЕР №2

Если вы хотите проверить только двоичный журнал, вы можете сделать это:

mysqlbinlog mysql-bin.000632 > binlogsql.txt
T1=`head -20 binlogsql.txt | grep "SET TIMESTAMP" | head -1 | sed 's/=/ /' | sed 's/\// /' | awk '{print $3}'`
T2=`tail -20 binlogsql.txt | grep "SET TIMESTAMP" | tail -1 | sed 's/=/ /' | sed 's/\// /' | awk '{print $3}'`
(( TT = T2 - T1 ))
echo ${TT}

Посмотрите, что он делает:

[root@*** mysql]# mysqlbinlog mysql-bin.000632 > binlogsql.txt
[root@*** mysql]# T1=`head -20 binlogsql.txt | grep "SET TIMESTAMP" | head -1 | sed 's/=/ /' | sed 's/\// /' | awk '{print $3}'`
[root@*** mysql]# T2=`tail -20 binlogsql.txt | grep "SET TIMESTAMP" | tail -1 | sed 's/=/ /' | sed 's/\// /' | awk '{print $3}'`
[root@*** mysql]# (( TT = T2 - T1 ))
[root@*** mysql]# echo ${TT}
32660
[root@*** mysql]#

Эпилог

Вы можете рассчитать количество секунд, которое требуется каждому бинлогу для генерации, и отсчитать оттуда количество

Попробуйте !!!