centos7.+系统,mysql主从部署
两台服务器或者两个虚拟机
主库:master IP:192.168.85.152
从库:slave IP:192.168.85.153
注意下面几点:
1)要保证同步服务期间之间的网络联通。即能相互
ping
通,能使用对方授权信息连接到对方数据库(防火墙开放3306端口)。
2)关闭selinux。
3)同步前,双方数据库中需要同步的数据要保持一致。这样,同步环境实现后,再次更新的数据就会如期同步了。
关闭主库防火墙或者放行mysql的3306端口,如果不关闭,那么配置完成后,从库连接不到主库。。。。。。。。。。。。。。。。。。。。。。。。。。。。。
或者放行3306端口(参数permanent表示重启仍然生效):
[root@localhost ~]# firewall-cmd --zone=public --add-port=3306/tcp --permanent
[root@localhost ~]# firewall-cmd --reload //重新加载策略
[root@localhost ~]# firewall-cmd --zone=public --list-ports //检查是否放行3306端口
1.打开主库的log-bin,并指定一个路径,修改server-id=1.
[root@localhost data]# Vim /etc/my.cnf
在[mysqld]这个模块下边添加
….
server-id=1 #数据库唯一ID,主从的标识号绝对不能重复。
log-bin=/application/mysql/mysql-bin #开启bin-log,并指定文件目录和文件名前缀
binlog-do-db=rdc_manager #需要同步的数据库。如果是多个同步库,就以此格式另写几行即可。如果不指明对某个具体库同步,就去掉此行,表示同步所有库(除了ignore忽略的库)。
binlog-ignore-db=mysql #不同步mysql系统数据库。如果是多个不同步库,就以此格式另写几行;也可以在一行,中间逗号隔开。
sync_binlog = 1 #确保binlog日志写入后与硬盘同步
binlog_format = mixed #bin-log日志文件格式,设置为MIXED可以防止主键重复。
……
2.然后通过下边的命令在主库下查看刚刚修改的参数:
[root@localhost data]# egrep "log-bin|server-id" /etc/my.cnf
server-id = 1
log-bin=/application/mysql/mysql-bin
binlog-do-db=rdc_manager
binlog-ignore-db=mysql
sync_binlog = 1
binlog_format = mixed
3.修改后查看bin-log功能是否已经打开(建议重新启动下mysql)
(1)查看log-bin指定的目录下有没有下边的文件:
-rw-rw----. 1 mysql mysql 527954 Apr 24 01:15 mysql-bin.000001
-rw-rw----. 1 mysql mysql 36 Apr 24 00:50 mysql-bin.index
(2)在mysql数据库中:
Mysql > show variables like ’log_bin%’;
会看到log_bin 的vlue 值为ON ,说明已经开启。
4. 在主库上创建用于从库复制的账号backup:
mysql> create user backup identified by '123456';
mysql>grant replication slave on *.* to 'backup'@'192.168.85.%' identified by '123456';
上面语句的意思是:赋予backup用户可以从192.168.85.0这个网段连接同步的权限。
Mysql> flush privileges //刷新到磁盘中去,立即生效
注意:replication slave 为同步的必须的权限,而不需要赋予all权限。
5.在主库上做一备份
mysql > flush table with read lock ; //给主库加一个只读锁
保持上边的回话窗口,重新打开一个会话执行下边的备份命令:
[root@localhost ~]# mysqldump -uroot -p123456 –A –B --events --manter-data=2>/root/backup.sql
备份完后,给主库解锁:
mysql > unlock tables;
查看主服务器master状态(注意File与Position项,从服务器需要这两项参数)
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 | 120 | rdc_manager | mysql | |
+------------------+----------+--------------+------------------+-------------------+
6.通过scp将主库备份的数据传给从库:
[root@localhost~]# scp/application/mysql/backupxin.sql root@192.168.85.153:/application/mysql // 主库上操作
7.在从库恢复数据:
[root@localhost ~]
# vim /etc/my.cnf
server-
id
= 2 //一定不能和主库一样
log-bin = mysql-bin
slave-skip-errors = all
[root@localhost ~]# mysql –uroot –p123456 < /application/mysql.backup.sql
mysql> stop slave; #执行同步前,要先关闭slave
mysql> CHANGE MASTER TO
MASTER_HOST='192.168.85.152',
MASTER_PORT=3306,
MASTER_USER='backup',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='mysql-bin.000001', //--master-data=1时候,不需要这一行。 show master status查到的file
MASTER_LOG_POS=120; //--master-data=1时候,不需要这一行。 show master status查到的position
mysql >start slave
在从库检查同步成功与否:
mysql> show slave status\G
…..
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
…….
如果以上两个参数是YES,就算成功了。