mancha 发表于 2018-10-11 06:36:24

玩转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.%'>  flush privileges;
  show grants for rep@'192.168.11.%’;
  注意: replication slave 为mysql 同步的必须权限,此处不要授权all容易被******。
  #4 进行导库操作(对数据库锁表只读) 当前窗口不要关闭
  注意:生产环境时,操作主从复制,需要申请停机时间。数据量很大锁表会影响业务。
  flush table with read lock;
  提示: 这个锁表命令的时间,在不同的引擎的情况,会受下面参数控制,锁表时,如果超过设置时间不操作会自动解锁。
  受二参数限制:interactive_timeout = 60wait_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 root@192.168.11.16:/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

页: [1]
查看完整版本: 玩转mysql主从和主主