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