mysql传统主从复制,一主一从(源码包mysql5.7)

在mysql5.7版本中,%包括本地主机
mariadb-server中的%是远程登陆,不包括本地主机。
条件:主库开启biglog日志。主和从数据完全相同。
主:192.168.122.196
从:192.168.122.101
同步数据:对主库数据进行备份
[root@master ~]mysqldump -p’’ --all-databases --single-transaction --master-data=1 --flush-logs > /tmp/all.sql
其中–master-data可以为1也可以为2,为1则二进制日志中授权的一步不会被注释掉,为2则没有。
将数据导入从库中,方法1:重定向

[root@slave ~]mysql -uroot -p'123' </tmp/all.sql

方法二:在mysql中source

[root@slave ~]mysql -uroot -p'123'
mysql>source /tmp/all.sql

在主库中给从库授权

[root@master ~]mysql> grant replication slave on  *.* to 'slave'@'192.168.122.101'  identified by'123';
在从库进行登陆测试,如果不成功则实验不成功
[root@slave ~]mysql -uroot -p'123' -h 192.168.122.196

配置主库

[root@master ~]# vim /etc/my.cnf
[mysqld]
innodb_file_per_table=1
server_id=1
#id号
log_bin=/backup/master
log_bin_index=/backup/maste
易错点:创建相应的目录如/backup,确保配置文件中所有目录的owner和group是mysql
主库中查看主的状态:
mysql> show master status\G
*************************** 1. row ***************************
File: master.000001
Position: 120
从120开始的
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec

配置从库:
[root@slave ~]# vim /etc/my.cnf
[mysqld]
server-id=2
查看slave状态
[root@slave ~]# mysql -uroot -p123
mysql> show slave status\G
Empty set (0.00 sec)

配置主从同步
[root@slave ~]# mysql -p123 -uroot
mysql> change master to
-> master_host='192.168.122.196',
-> master_user='slave',
-> master_password='123',
-> master_port=3306,
-> master_log_file='master.000001',
-> master_log_pos=120;
Query OK, 0 rows affected, 2 warnings (0.50 sec)
(其中master_log_file和 master_log_pos可由在主库中查看master状态获得)
启动slave
mysql> start slave;
Query OK, 0 rows affected (0.03 sec)
查看状态
mysql> show slave status\G
。。。
Slave_IO_Running: Yes 
96/162Slave_SQL_Running: Yes
。。。
两个都为yes即成功

测试:在主库中修改数据,从库也会自动同步,从库不能被写入,否则主从复制将会被破坏。

配置主从同步时,如果在备份时使用了–master-data=1,导入时使用source则配置同步时可不用指定master_log_file和master_log_pos,可使用master_auto_position=1代替。

猜你喜欢

转载自blog.csdn.net/weixin_42275939/article/details/82894267