修改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