MySQL主从复制、主主复制
主从复制:主库可写(会写入从库)可读,从库只能读 主主复制:两个库可写可读,一个库修改会写入另一个库
一、主从复制
1、准备两台服务器
主库服务器 192.168.1.140 master
从库服务器 192.168.1.141 slave
2、在主库创建一个测试数据库、并写入数据用作测试;
mysql> create database school;mysql> create table stdents;mysql> select * from students;+------+------+------+| ID | NAME | age |+------+------+------+| 1 | zeng | 20 || 2 | liao | 21 || 3 | love | 23 |+------+------+------+5 rows in set (0.04 sec)
3、配置 master 主库服务器
a. 开启binlog
vi /etc/f[myslqd]server-id=1## 机器的唯一标识 ##bin-log=mysql-bin ## bin-log日志名称 ,开启bin-log ##binlog-format=ROW ## 二进制日志格式 ##datadir = /data/mysql## bin-log日志存放地点 ### binlog-do-db=school## 同步数据库名称(可不用) ##
b.重启 service mysqld restart
[root@localhost ~]# systemctl restart mysqld
c.进入mysql,查看binlog是否开启成功
[root@localhost ~]# cd /data/mysql[root@localhost mysql]# ll-rw-r-----. 1 mysql mysql178 10月 5 08:34 binlog.000017-rw-r-----. 1 mysql mysql178 10月 5 09:17 binlog.000018-rw-r-----. 1 mysql mysql178 10月 5 09:49 binlog.000019-rw-r-----. 1 mysql mysql155 10月 5 09:49 binlog.000020-rw-r-----. 1 mysql mysql320 10月 5 09:49 binlog.index
d.创建用户并授权
[root@localhost mysql]# mysql -u root -p#登录mysql#mysql> create user 'villian'@'192.168.206.141' identified by '123456'; ##创建用户##mysql> grant replication slave on *.* to 'villian'@'192.168.206.141'; ##用户授权##
4、配置 slave 从库服务器
a.开启binlog
vi /etc/f [myslqd]server-id=2 ## 机器的唯一标识 ##bin-log=mysql-bin## bin-log日志名称 ,开启bin-log ##binlog-format=ROW ## 二进制日志格式,跟主服务器一致 ##log-slave-updates=true## 中继日志执行之后,这些变化是否需要计入自己的binarylog。党你的从服务器需要作为另外一个服务器的主服务器的时候需要开启。就是双主互相备份,或者多主循环备份。#### ( ( server-id机器的唯一标识),后面两步是用来打开slave的relaylog功能的)
b.重启mysql
[root@localhost ~]# systemct restart mysqld
5、建立主从关系
a.打开主库服务器登录mysql (获取File 和 Position)
[root@localhost ~]# mysql -u root -p## 登录mysql ##mysql> show master status;## 查看master状态 ##+------------------+----------+--------------+------------------+-------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+------------------+----------+--------------+------------------+-------------------+| mysql-bin.000001 |1356 | | | |+------------------+----------+--------------+------------------+-------------------+1 row in set (0.00 sec)
b.打开从库服务器登录mysql
[root@localhost ~]# mysql -u root -p## 登录mysql ##mysql> show slave status\G; ## 查看状态 ##状态未开启时进行如下设置:mysql> change master to master_host='192.168.206.140'; ## 主节点 ##mysql> change master to master_port=3306; ## 主节点的端口号 ##mysql> change master to master_user='villian'; ## 账号 ##mysql> change master to master_password='123456'; ## 密码 ##mysql> change master to master_log_file='mysql-bin.000001'; ## show master status 对应上述主库的日志 ##mysql> change master to master_log_pos=1356; ## show master status 对应上述主库的pos ##
c.在从库服务器开启从节点
mysql> start slave; ## 开启从节点 ##mysql> show slave status\G;## 查看状态 ##下图红色框框必须为开启状态Slave_IO_Running :负责与主机的io通信Slave_SQL_Running :负责自己的slave mysql进程
其他错误:1.网络不通; 2.密码不对; 3.pos不对; 4.防火墙没关; 5.server-id冲突;
1、若使用克隆虚拟机,必须修改mysql UUID,否则会显示 Slave_IO_Running: NO
2、主从复制实战视频讲解分析
3、master and slave have equal MySQL server ids
4、防火墙
————————— ####### 主从复制配置完成 ####### ———————————
二、主主复制
1、准备两台服务器
主库服务器 192.168.1.140 master
从库服务器 192.168.1.141 master
2、在两台机器安装mysql
MySQL 8.0 安装教程
3、修改两个库服务器f配置文件
第一台:[root@localhost mysql]# vi /etc/f[mysqld]server-id=1log-bin=/var/lib/mysql/mysql-binauto_increment_increment=2auto_increment_offset=1
第二台:[root@localhost mysql]# vi /etc/f[mysqld]server-id=2log-bin=/var/lib/mysql/mysql-binauto_increment_increment=2auto_increment_offset=2
[root@localhost mysql]# systemctl restart mysqld ## 重启mysql ##
4、创建用户并授权(两个服务器都要创建)
[root@localhost mysql]# mysql -u root -p#登录mysql#mysql> create user 'villian'@'%' identified by '123456';##创建用户##mysql> grant replication slave on *.* to 'villian'@'%';##用户授权##
5、建立关系
############# 第二台关联第一台 ##############
a.打开第一台机器登录mysql
mysql> show master status; ## 查看状态 ##+------------------+----------+--------------+------------------+-------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+------------------+----------+--------------+------------------+-------------------+| mysql-bin.000001 |1356 | | | |+------------------+----------+--------------+------------------+-------------------+1 row in set (0.00 sec)
b.打开第二台机器登录mysql,执行如下操作
change master to master_host='192.168.206.140'; // 主节点change master to master_port=3306; //主节点的端口号change master to master_user='villian1', // 账号change master to master_password='123456', // 密码change master to master_log_file='mysql-bin.000001', // show master status 对应的的日志change master to master_log_pos=1356; // show master status 对应的
############# 第一台关联第二台 ##############
a.打开第二台机器登录mysql
mysql> show master status; ## 查看状态 ##+------------------+----------+--------------+------------------+-------------------+| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+------------------+----------+--------------+------------------+-------------------+| mysql-bin.000002 |2072 | | | |+------------------+----------+--------------+------------------+-------------------+1 row in set (0.00 sec)
b.打开第一台机器登录mysql,执行如下操作
change master to master_host=‘192.168.206.141’; ## 主节点change master to master_port=3306; ##主节点的端口号change master to master_user='villian2'; ## 账号change master to master_password='123456';// 密码change master to master_log_file='mysql-bin.000002'; ## show master status 对应的的日志change master to master_log_pos=2072; ## show master status 对应的
6.启动库,执行start slave
mysql> start slave;
注释:若使用克隆虚拟机,必须修改mysql UUID,否则会显示 Slave_IO_Running: NO
其他错误:1.网络不通; 2.密码不对; 3.pos不对; 4.防火墙没关; 5.server-id冲突;
————————— ####### 主主复制配置完成 ####### ———————————