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