主服务器: IP: 47.94.157.59
从服务器: IP: 112.74.215.215
一、 主服务器相关配置
- 进入mysql
2、创建一个数据库
选中该数据库 use test;
3、给这个数据库配置一个用户( http://blog.sina.com.cn/s/blog_9179ad990102x4gi.html)
grant replication slave on *.* to '用户名'@'主服务器' identified by '用户密码';
mysql> grant replication slave on *.* to 'testuser'@'47.94.157.59' identified by '12345678';
mysql> flush privileges #刷新权限
注释:授权用户testuser只能从112.74.215.215这个地址访问主服务器47.94.157.59的数据库,并且只具有数据库备份的权限
4、修改/etc/my.cnf配置文件vi /etc/my.cnf
[root@iZ2zej7zfjle71smpwkp30Z ~]# cd /etc
[root@iZ2zej7zfjle71smpwkp30Z etc]# vi my.cnf
在文件[mysqld]下添加下面数据
server-id=1 #表示主服务器
log-bin=mysql-bin #启动MySQL二进制日志系统,
binlog-do-db=ourneeddb #需要同步的数据库
binlog-ignore-db=mysql #不同步mysql系统数据库,若还有其它不想同步的,继续添加
[root@localhost ~]lmnp restart #重启服务
5、查看主服务器master状态(注意File与Position项,从服务器需要这两项参数)
mysql> show master status;
6、导出数据库
导出数据库之前先锁定数据库
flush tables with read lock; #数据库只读锁定命令,防止导出数据库的时候有数据写入
unlock tables; #解除锁定
导出数据库结构及数据:
mysqldump -uroot -p ourneeddb > /home/ourneeddb.sql
导出存储过程及函数:
mysqldump -uroot -p -ntd -R ourneeddb > ourneeddb_func.sql
注释:tips: -ntd 导出存储过程、 -R导出函数
二、 从服务器相关配置
1、修改/etc/my.cnf配置文件vi /etc/my.cnf
[mysqld]下添加以下参数,若文件中已经存在,则不用添加
server-id=2 #设置从服务器id,必须于主服务器不同
log-bin=mysql-bin #启动MySQ二进制日志系统
replicate-do-db=ourneeddb #需要同步的数据库名
replicate-ignore-db=mysql #不同步mysql系统数据库
[root@localhost~ ]/etc/init.d/mysqld restart #重启服务
2、数据导入(把主服务器的数据导入)
3、配置主从同步
[root@localhost~ ]mysql -uroot -p
mysql>use mysql
mysql>stop slave;
mysql>change master to
master_host='47.94.157.59',
master_user='testuser',
master_password='12345678',
master_log_file='mysql-bin.000001',(主服务器查询的参数)
master_log_pos=107; #log_file与log_pos是主服务器master状态下的File与Position
mysql>start slave;
mysql>show slave statusG;
注释:Slave_IO_Running: Yes Slave_SQL_Running: Yes这两项必须为Yes
Log_File、Log_Pos要于master状态下的File,Position相同
注意:不能再从服务器添加数据 否则会主服务器添加的时候会报主键冲突
锁表 清理从服务器数据 清除binlog
purge master logs to'mysql-bin.000010'; #清除mysql-bin.000010之前的
purge master logs before '2018-3-8 00:00:00'; #清除2018-3-8 00:00:00'之前的
reset master 清空日志文件
iptables -F 清除防火墙规则
PURGE MASTER LOGS BEFORE DATE_SUB(CURRENT_DATE, INTERVAL 1 minute); 清除1分钟之前的