Mysql
Материал из Ksimute
Содержание |
Создание пользователя и базы.
#cat gen_base.sh #!/bin/bash DATABASE="upXXX" USERNAME="upXXX" PASSWORD="SecurePassword" #echo "Enter mysql root password:" #read -s ROOT_PW ROOT_PW="RootMysqlPassword" mysqladmin -u root --password=$ROOT_PW create $DATABASE mysql -u root --password=$ROOT_PW -e "GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER,CREATE ROUTINE, CREATE TEMPORARY TABLES,CREATE VIEW,EXECUTE,INDEX,SHOW VIEW, ALTER ROUTINE on $DATABASE.* to '$USERNAME'@'%' IDENTIFIED by '$PASSWORD';"
Репликация master-slave
Сначала включаем на мастере бинарные логи.
vi /etc/mysql/my.cnf server-id = 11 log_bin = /var/log/mysql/mysql-bin.log # WARNING: Using expire_logs_days without bin_log crashes the server! See README.Debian! expire_logs_days = 10 max_binlog_size = 100M binlog_do_db = mydatabase #binlog_ignore_db = include_database_name
Потом идем на мастер, делаем.
grant replication slave on *.* to 'repl_user'@'%' identified by 'SecurePassword';
Делаем дамп на мастере
mysqldump --single-transaction --master-data=2 mydatabase | bzip2 >database.bz2
или
:~# mysqldump --single-transaction --master-data=2 --all-databases | bzip2 >database.bz2
На слэйве
# vi /etc/mysq/my.cnf server-id=2 master-connect-retry=60 replicate-do-db=mydatabase
mysql> CHANGE MASTER TO MASTER_HOST='masterHost', MASTER_USER='repl_user',MASTER_LOG_FILE=, MASTER_LOG_POS=, MASTER_PASSWORD='SecurePassword'; mysql> START SLAVE; mysql> show slave status;
Read_Master_Log_Pos: 5002 Пошла репликация!
MASTER_LOG_FILE=, MASTER_LOG_POS= - берутся из дампа вверху.
Если строим сложную репликацию елочкой. т.е.
master-> slave\master -> (salve1,slave2,...slaveXXX)
не забываем на slave\master включить
log-slave-updates = 1
По-умолчанию, раб не пишет лог об обновлениях получаемых с мастера в свой бинарный лог. Эта опция говорит ему писать начать.
Пропустить 1 запрос на слэйве (бывает нужно когда реплика ломается):
mysql>SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1; START SLAVE;
Корректный способ удаления бинарных логов на мастере:
mysql> show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000972 | 106 | | | +------------------+----------+--------------+------------------+ 1 row in set (1.32 sec) mysql> PURGE BINARY LOGS TO 'mysql-bin.000972'; Query OK, 0 rows affected (26.83 sec) mysql>
можно также указывать дату
PURGE BINARY LOGS BEFORE '2008-04-02 22:46:26';
Как построить еще одного слэйва.
Мастер нагружать дампом смысла нет, да и не всегда это возможно.
Собственно по шагам: 1. стопим слэйв 2. смотрим статус и сохраняем его SHOW SLAVE STATUS \G; 3. дампим данные 4. стартуем 5. везем данные на новый сервер 6. заливаем из дампа смотрим статус который сохранили после остановки слэйва.
Ключевое поле:
Exec_Master_Log_Pos The position in the current master binary log file to which the SQL thread has read and executed, marking the start of the next transaction or event to be processed. You can use this value with the CHANGE MASTER TO statement's MASTER_LOG_POS option when starting a new slave from an existing slave, so that the new slave reads from this point.
The coordinates given by (Relay_Master_Log_File, Exec_Master_Log_Pos) in the master's binary log correspond to the coordinates given by (Relay_Log_File, Relay_Log_Pos) in the relay log.