KsI-wiki online documents

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

На слэйве

 # 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';