====== Перевод 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 пуст. В противном случае сконвертируйте таблицы в ручном режиме.