修改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 [email protected]'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 [email protected]'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;