天天看点

mysql主从和主主区别_玩转mysql主从和主主

++++++++++++++++++++++++ 在master上处理 ++++++++++++++++

#1 配置文件中添加并保证唯一

server-id=1

log-bin=/var/lib/mysql/mysql-bin

#2 重启

/etc/init.d/mysqld restart

#3 建立用于同步的账号rep

grant replication slave on *.* to 'rep'@'192.168.11.%' identified by '123456';

flush privileges;

show grants for rep@'192.168.11.%’;

注意: replication slave 为mysql 同步的必须权限,此处不要授权all容易被******。

#4 进行导库操作(对数据库锁表只读) 当前窗口不要关闭

注意:生产环境时,操作主从复制,需要申请停机时间。数据量很大锁表会影响业务。

flush table with read lock;

提示: 这个锁表命令的时间,在不同的引擎的情况,会受下面参数控制,锁表时,如果超过设置时间不操作会自动解锁。

受二参数限制:interactive_timeout = 60  wait_timeout = 60

默认情况下时长: show variables like '%timeout%';

#5 查询bin-log日志在哪里 查询主库状态

show master status;

查询主库状态,即当前binlog日志文件名和二进制binlog日志偏移量。

表示我现在主库往bin-log里写数据写到了 000001这个文件的342位置点

#6 备份所有库 即导出数据库所有数据

mysqldump -u root -p123456 --events --compact --default-character-set=utf8  -A -B -F |gzip >  mysql_all_$(date +%F).sql.gz

#7 解锁

unlock table

++++++++++++++++++++++++ 在slave上处理 ++++++++++++++++

#1 配置文件中设置server-id 并关闭bin-log参数配置

server-id=2

#log-bin=/var/lib/mysql/mysql-bin

#2 重启

/etc/init.d/mysqld restart

#3 将主库的数据库拉取到本地导进数据库

scp [email protected]:/home/yeqing/mysql_all_2017-01-18.sql.gz .

gzip -d mysql_all_2017-01-18.sql.gz

注意: 有外键的表不好导,mysql等系统表不要导

#4 配置同步参数(根据show master status设置)

mysql> CHANGE MASTER TO

-> MASTER_HOST='192.168.11.16',

-> MASTER_PORT=3306,

-> MASTER_USER='rep',

-> MASTER_PASSWORD='123456',

-> MASTER_LOG_FILE='mysql-bin.000001',

-> MASTER_LOG_POS=342;

Query OK, 0 rows affected (0.11 sec)

#5 检查是否有master.info

cat /var/lib/mysql/master.info

#6 执行同步开关啦

slave start;

#7 检查是否已经同步

show slave status\G;

io和sql进程要yes:

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

延迟要为0

Seconds_Behind_Master:0

#8 如果遇到IO进程和sql进程有不是YES,进行如下处理:

方案1:

1. 在master上

清除bin-log: reset master;

重新查看位置点:show master status;

2. 在slave上

关闭同步:slave stop

清除bin-log: rester

对照master位置点重新进行配置同步参数

重新开启同步: slave start;

再次查看是否同步: show slave status\G;

方案二:

差异小的情况下直接通过navicat的数据对比功能 找出来 给从库补上

关闭同步:slave stop

清除bin-log: rester

重新开启同步: slave start;

方案三:

差异大的情况下,直接重新做主从同步。

#9 测试同步

在master上:

create table test_2(id int);

mysqlbinlog mysql-bin.*|egrep -v '#|*!'

在slave上:

show tables;

+++++++++++++++++++++++++++++++++++ 主主配置++++++++++

master-1:

relay_log_info_file=/var/lib/mysql/relay-log.info

relay-log-purge = 1

log-slave-updates

relay-log-recovery =1

auto_increment_offset = 1

auto_increment_increment = 2

master-2:

relay_log_info_file=/var/lib/mysql/relay-log.info

relay-log-purge=1

relay-log-recovery=1

log-slave-updates

auto_increment_offset = 2

auto_increment_increment = 2

分别重启mysql 并 slave stop /start