vim /data/3306/my.cnf
[mysqld]
log-bin= /data/3306/log-bin
server-id= 6
vim /data/3307/my.cnf
[mysqld]
server-id= 7
/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';
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;
引擎不同,锁表时间会受下面参数控制,锁表时如果超过设置时间不操作就会自动解锁
锁表控制参数,单位:秒,超过这个时间会自动解锁
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/
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