Ключевые слова:rus, mysql, database, language, codepage, charset, sort, replication, (найти похожие документы)
From: mahoune
Newsgroups: http://www.sql.ru
Date: Mon, 24 May 2004 18:21:07 +0000 (UTC)
Subject: MySQL - проблемы с русским языком и их решение
Оригинал: http://www.sql.ru/faq/faq_topic.aspx?fid=152
Проблем бывает несколько:
Самая безобидная и пожалуй с чего надо начинать - правильно выставить
кодировку (http://www.mysql.com/doc/en/Character_sets.html). Для этого
достаточно правильным образом настроить MySQL через файл настроек my.cnf
Вот пример этого файла, в файле остались строки, относящиеся только к
настройкам языка:
# Example mysql config file.
# Copy this file to c:\my.cnf to set global options
#
# One can use all long options that the program supports.
# Run the program with --help to get a list of available options
# This will be passed to all mysql clients
[client]
default-character-set=cp1251
character-sets-dir = d:/usr/local/mysql/share/charsets
[mysqld]
default-character-set=cp1251
character-sets-dir=d:/usr/local/mysql/share/charsets/
ariable = innodb_lock_wait_timeout=50
[mysql]
default-character-set = cp1251
Не работает сортировка и другие функции UCASE(), LCASE(), LIKE и другие.
В этой ситуации лучшее решение это перекомпилить MySQL из исходных
текстов с использованием ключа --with-charset=cp1251.
Второй вариант использовать BINARY, но тут не все будет работать. Не
будет работать UCASE() и другие. Не будет работать LIKE без учета регистра.
Неверно возвращаются русские символы из базы данных.
В этом вопросе надо понять главное, MySQL никогда не будет
перекодировать ваши данные перед сохранением, за исключением случаев
использования CHARACTER SET cp1251_koi8 соответственно для
перекодирования cp1251 из/в koi8. Все остальные варианты, как правило,
связаны с несоответствием настроек языка веб сервера и базы данных.
Односторонняя репликация.
Для организации резервного копирования БД нам будет необходимо
запустить второй MySQL сервер.
Заводим на основном сервере нового пользователя, для организации
репликации:
#mysql
mysql> GRANT FILE ON *.* TO repl@"%" IDENTIFIED BY '';
Делаем на основном сервере дамп тех БД которые необходимо бэкапить:
mysqldump --user=username --password=password --opt database > backup-file.sql
Переносим получившийся файл на резервный сервер и загружаем структуру
и данные в MySQL:
mysql --user=username --password=password database < backup-file.sql
Далее конфигурим оба сервера для организации репликации, создадим
конфигурационные файл /etc/my.cnf
Для основного сервера (master):
[mysqld]
log-bin
binlog-do-db=dbname1
binlog-do-db=dbname2
binlog-do-db=dbname3
server-id=1
Для резервного сервера:
[mysqld]
master-host=adres_master_server
master-user=repl
master-password=master_password
master-port=3306
server-id=2
replicate-do-db=dbname1
replicate-do-db=dbname2
replicate-do-db=dbname3
master-info-file=/var/lib/mysql/master.info
После внесения всех изменений в конфигурации серверов, перезагружаем
сначала основной MySQL, а затем резервный.
Для проверки соединения, смотрим файл /var/lib/mysql/master.info