peibaishi 发表于 2018-10-11 07:29:40

MySQL主从复制(脚本配合)

  首先需要有两台mysql服务器,我是同过mysql的多实例来实现的主从复制,实验中用的了脚本,可以参考多实例环境的搭建
  多实例环境搭建 http://aby028.blog.51cto.com/5371905/1892250
  主:3306(master)
  从:3307(slave)
  保证 mysql 多实例的正常运行
  netstat -tlunp | grep 330

  查看 log-bin 和 server-id
  egrep "log-bin|server-id" /data/{3306,3307}/my.cnf
  /data/3306/my.cnf:log-bin = /data/3306/mysql-bin          # master开
  /data/3306/my.cnf:server-id = 1
  /data/3307/my.cnf:#log-bin = /data/3307/mysql-bin       # slave可以关闭
  /data/3307/my.cnf:server-id = 3
  若更改 mysql 的配置文件需要重启数据库
  /data/3306/mysql stop
  /data/3307/mysql stop
  /data/3306/mysql start
  /data/3307/mysql start
  登陆主库3306
  mysql -uroot -p123456 -S /data/3306/mysql.sock
  查看 mysql 的配置参数
  mysql> show variables like "log_bin";
  mysql> show variables like "server_id";
  在主库授权一个账号,专门用于同步,然后刷新权限

  grant replication slave on *.* to rep@'%'>  flush privileges;
  检查刚才的操作
  select user,host from mysql.user;
  show grants for rep@'%';
  锁表。锁表后自己将无法创建数据库
  flush table with read lock;
  备份打包 (需要另开一个窗口,保证之前的窗口不能退出)
  mysqldump -uroot -p123456 --events -S /data/3306/mysql.sock -A -B | gzip > /opt/bak_$(date +%F).sql.gz
  打包完成后,再次查看状态,保证与之前的查询状态一样,证明数据没有写入
  show master status;
  解锁表
  unlock tables;
  将刚才备份好的 gzip 文件导入到 3307 数据库(全量备份)
  cd /opt/
  gzip -d bak_2017-01-06.sql.gz
  mysql -uroot -p123456 -S /data/3307/mysql.sock < bak_2017-01-06.sql
  增量备份,登陆从库配置同步参数
  CHANGE MASTER TO
  MASTER_HOST='192.168.6.45',
  MASTER_PORT=3306,
  MASTER_USER='rep',
  MASTER_PASSWORD='123456',
  MASTER_LOG_FILE='mysql-bin.000001',
  MASTER_LOG_POS=459;
  在 salve 上执行 start slave 操作,IO 连接
  start slave;
  查看当前的状态,关键有以下几个内容
  show slave status\G;
  Slave_IO_State: Waiting for master to send event
  Slave_IO_Running: Yes
  Slave_SQL_Running: Yes
  Seconds_Behind_Master: 0   #从库落后主库的秒数

页: [1]
查看完整版本: MySQL主从复制(脚本配合)