大型项目对备份尤为关注,一般有双机备份,热备冷备,异地灾备等等… 今天来说一下两台服务器上的 MySQL 主从复制备份,需求比较简单:从要同步主的数据,但也不用太频繁,保持 15 分钟的数据差即可,意思就是每 15 分钟去同步一次修改过的数据。开干!
我们这里环境是两台 Linux 服务器,一台在公网,一台在内网,公网是主,内网是从,数据库都是 MySQL 5.7(使用 LNMP 安装)。
主库操作
首先我们先新建一个数据同步用户,让从库使用这个用户可以来同步数据
CREATE USER 'slave'@'%' IDENTIFIED BY '密码';
GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
百分号代表该用户可以在任意 IP 登录。
然后我们需要把主库备份下来,如果你的库此时并没有访问,那么可以不用锁表,但最好先锁表再备份
mysql> flush tables with read lock;
使用 mysqldump 备份需要同步的库,我这里是同步 mikublog 这个库
mysqldump -uroot -p --databases mikublog | gzip > mysql_bak.$(date + %F)sql.gz
备份好之后记录一下当前位置,记住 File 和 Position 的值
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000014 | 154 | | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
最后解锁表
mysql> unlock tables;
Query OK, 0 rows affected (0.00 sec)
从库操作
把刚刚备份的压缩包拷贝过来,并解压:gzip -d 压缩包名字,然后把 sql 刷到数据库里去。
修改 my.cnf,一般只需要改两个值,把 server-id 改为唯一值
[mysqld]
log-bin=mysql-slave-bin
server-id = 2
改好之后重启数据库
service mysql restart
设置主从配置
mysql> change master to master_host='192.168.100.110', master_user='slave', master_password='mypassword', master_port=3306, master_log_file='mysql-bin.000014', master_log_pos= 154, master_delay=900, master_connect_retry=30;
各参数含义:
master_host :主库的地址
master_port:主库的端口号
master_user:用于数据同步的用户
master_password:用于同步的用户的密码
master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值
master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值
master_delay:延迟复制配置,设置从数据库延时 N 秒后,再与主数据库进行数据同步复制
master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是 60 秒
开启主从复制
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
查看同步状态
mysql> show slave status \G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
...
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
...
1 row in set (0.00 sec)
SlaveIORunning 和 SlaveSQLRunning 都是 Yes 说明主从复制已经开启。
完美~
感谢:
https://segmentfault.com/a/1190000023408446
原创文章转载请注明:转载自:MySQL 的主从复制配置
发表评论
沙发空缺中,还不快抢~