Linux下MySQL主从复制

修改my.cnf

vim /data/3306/my.cnf
[mysqld]
log-bin= /data/3306/log-bin
server-id= 6
vim /data/3307/my.cnf
[mysqld]
server-id= 7
  • 主库必须开启binlog,如果不是联级复制从库可以不用开启,但是server-id必须唯一
    重启数据库
/data/3306/mysql stop
/data/3306/mysql start
/data/3307/mysql stop
/data/3307/mysql start

检查数据库配置情况

mysql -S /data/3306/mysql.sock 
mysql> show variables like 'server_id';
mysql> show variables like 'log_bin';

在这里插入图片描述

在主库建立用于同步的rep账号

mysql>grant replication slave on *.* to rep@'10.0.0.%' identified by '111111';
mysql> flush privileges;
参数 说明
replication slave 主从同步用户的必须权限,不需要给其他权限
*.* 表示所有表,也可以指定某个库下的某个表,例如:mysql.user,mysql库下的user表
[email protected].% rep为账号,10.0.0.%为授权主机网段,使用%表示允许整个10.0.0.0网段以rep用户访问
identified by 设置密码
  • 检查已建立的账号
mysql> select user,host from mysql.user;

在这里插入图片描述

  • 查看用户权限
mysql>show grants for rep@'10.0.0.%';

在这里插入图片描述

对主数据库进行锁表

mysql>flush table with read lock;

引擎不同,锁表时间会受下面参数控制,锁表时如果超过设置时间不操作就会自动解锁
在这里插入图片描述
锁表控制参数,单位:秒,超过这个时间会自动解锁

锁表后查看主库binlog状态

  • 查看锁表后主库binlog信息
mysql>show master status; 

在这里插入图片描述

导出主库数据

锁表后一定要利用连接工具新开一个窗口导出数据,如果数据量大于50G,并且允许停机,可以停库直接打包数据文件进行迁移,那样更快

mysqldump -uroot -S /data/3306/mysql.sock --events -A -B |gzip >/data/mysql_bak.$(date +%F).sql.gz
ll /data/

在这里插入图片描述

  • 为确保在数据导出期间没有数据写入,再次查看binlog
mysql>show master status;

需保持导出数据前、后binlog一致

  • 导出数据库后可以解锁主库
msyql>unlock tables;

把主库数据导入到从库

  • 在从库解压主库备份文件
gzip -d mysql_bak.2018-12-29.sql.gz 
mysql -uroot -S /data/3307/mysql.sock < /data/mysql_bak.2018-12-29.sql

如果备份时用了-A参数,则在还原数据到3307时,登录3307密码也会和3306一致,因为3307的授权表也被覆盖了

登录从库,配置复制参数

change master to MASTER_HOST='10.0.0.200',MASTER_USER='rep',MASTER_PASSWORD='111111',MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=324;

在这里插入图片描述

参数 说明
MASTER_HOST 主库ip
MASTER_PORT 主库端口号
MASTER_USER 用于进行复制的用户
MASTER_PASSWORD 用户的密码
MASTER_LOG_FILE 是在主库show master status时查看的binlog文件名,不能用空格
MASTER_LOG_POS 在主库show master status时binlog的偏移量,不能有空格
  • 验证检查
cat /data/3307/data/master.info

在这里插入图片描述

开启复制

mysql>start slave;
mysql>show slave status;

在这里插入图片描述

验证主从复制结果

  • 主库
    在这里插入图片描述

  • 从库
    在这里插入图片描述

  • 在主库新建一个数据库

mysql>create database master;
mysql>show databases;

在这里插入图片描述

  • 从库查看
mysql>show databases;

在这里插入图片描述

其他

master开启二进制日志后默认记录所有库所有表的操作,可以通过配置来指定只记录指定的数据库甚至指定的表的操作,具体在mysql配置文件的[mysqld]可添加修改如下选项

  • 不同步哪些库
    binlog-ignore-db = mysql
    binlog-ignore-db = test
    binlog-ignore-db = information_schema

  • 只同步哪些库,除此之外不同步
    binlog-do-db = master

猜你喜欢

转载自blog.csdn.net/qq_33235529/article/details/85337521