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, это займёт некоторое время, в зависимости от мощности Вашего сервера.
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 пуст. В противном случае сконвертируйте таблицы в ручном режиме.