Перевод mikbill в innodb.

Перед началом операции сделайте бекап ВСЕХ БД которые находятся на сервере.
Сохраните конфиг MySQL на случай отката.

Centos

cp /etc/my.cnf /etc/my.cnf.proto

Debian

cp /etc/mysql/my.cnf /etc/mysql/my.cnf.proto

Переведите все базы данных, где используется Engine=InnoDB частично или полностью, в MyISAM

1 Выполнить mikbill-to-MyISAM.sh Запросит логин и пароль, вводим пользователь root и его пароль.

./mikbill-to-MyISAM.sh
Пользователь:root
Пароль:password

Скрипт переведет все таблицы базы mikbill в MyISAM, это займёт некоторое время, в зависимости от мощности Вашего сервера.

Если на сервере есть и другие БД, которые вы создали сами - переведите их в MyISAM вручную.

2 Выполните 2й раз mikbill-to-MyISAM.sh и убедиться, что convert2.sql пуст. Если он не пуст, то вручную сконвертировать оставшиеся таблицы и повторить выполнение скрипта.

3 Текущий конфиг Mysql заменить этим содержимым:

[client]
port = 3306
socket=/var/lib/mysql/mysql.sock

[mysql]
loose-local-infile=1

[mysqld_safe]
err-log = /var/log/mysql/mysql.err

[mysqld]

user = mysql
port = 3306
socket = /var/lib/mysql/mysql.sock
pid-file = /var/run/mysqld/mysqld.pid
log-error = /var/log/mysql/mysql.err
basedir = /usr
datadir = /var/lib/mysql
skip-external-locking
symbolic-links=0
skip-name-resolve

#system
language = /usr/share/mysql/russian
loose-local-infile=1
query_cache_size = 256M
query_cache_limit = 256M
join_buffer_size = 256M
max_join_size=256M
max_connect_errors = 1K
max_allowed_packet=16M
table_open_cache = 1k
table_cache = 1k
max_heap_table_size = 1024M
tmp_table_size = 1024M
thread_cache_size = 32
max_connections = 64

#Myisam
#т.к. его не используем, уменьшаем до минимума
key_buffer_size = 8M
sort_buffer_size = 2M
read_buffer_size = 2M
read_rnd_buffer_size = 2M
myisam_sort_buffer_size = 2M



#ниже включается бинари лог, разкоментируйте следующие 2 строки чтобы включить
#server-id=1
#log-bin=mysqld-bin
tmpdir = /tmp/

#innodb

innodb_file_per_table
innodb_flush_method=O_DIRECT
innodb_buffer_pool_size = 1G
innodb_additional_mem_pool_size = 4M
innodb_data_home_dir = /var/lib/mysql/
innodb_log_group_home_dir = /var/lib/mysql/
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_file_size = 256M
innodb_log_buffer_size = 8M
innodb_log_files_in_group = 2
innodb_flush_log_at_trx_commit = 0
innodb_lock_wait_timeout = 70


[mysqldump]
quick
max_allowed_packet = 16M

[isamchk]
key_buffer = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M

[myisamchk]
key_buffer_size = 256M
sort_buffer_size = 256M
read_buffer = 2M
write_buffer = 2M

[mysqlhotcopy]
interactive-timeout

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

4 Отредактируйте в конфиге параметры:

thread_concurrency = CPU*2
innodb_thread_concurrency = CPU*2
innodb_buffer_pool_size = 3G

ОЗУ для innodb как минимум 3Г и больше CPU - количество ядер

Проверьте эти пути, сравните их с оригинальным конфигом.
socket=/var/run/mysqld/mysqld.sock
err-log = /var/log/mysql/mysql.err
pid-file = /var/run/mysqld/mysqld.pid
log-error = /var/log/mysql/mysql.err
innodb_data_home_dir = /var/lib/mysql/
innodb_log_group_home_dir = /var/lib/mysql/

В Debian и FreeBSD пути нужно подправить.

4 Остановите сервис MySQL

Centos

/etc/init.d/mysqld stop

Debian

/etc/init.d/mysql stop

5 Убедитесь, что сервис действительно остановился.

ps auxfw|grep mysql

Вывод должен быть пустым.

6 Удалите файлы данных и логов InnoDB

rm /var/lib/mysql/ibdata1
rm /var/lib/mysql/ib_logfile0
rm /var/lib/mysql/ib_logfile1

7 Запустите сервис

Centos

/etc/init.d/mysqld start

Debian

/etc/init.d/mysql start

8 Выполните mikbill-to-InnoDB.sh

./mikbill-to-InnoDB.sh
Пользователь:root
Пароль:password

Скрипт переведет все таблицы в InnoDB, это займёт некоторое время. По завершению работы скрипта, запустите его повторно, чтобы убедится, что все таблицы сконвертированы успешно. Убедитесь, что после повторного выполнения mikbill-to-InnoDB.sh файл convert4.sql пуст. В противном случае сконвертируйте таблицы в ручном режиме.

  • billing/mysql_myisam_inodb.txt
  • Последние изменения: 3 лет назад
  • — Алексей Ларюшкин