centos7.+系统,mysql主从部署

两台服务器或者两个虚拟机

主库:master    IP192.168.85.152

从库:slave      IP:192.168.85.153

注意下面几点:
1)要保证同步服务期间之间的网络联通。即能相互ping通,能使用对方授权信息连接到对方数据库(防火墙开放3306端口)。
2)关闭selinux。
3)同步前,双方数据库中需要同步的数据要保持一致。这样,同步环境实现后,再次更新的数据就会如期同步了。
 

关闭主库防火墙或者放行mysql3306端口,如果不关闭,那么配置完成后,从库连接不到主库。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

或者放行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,就算成功了。

posted @ 2022-02-22 09:46  粉色纽扣  阅读(56)  评论(0编辑  收藏  举报