windows10下进行mysql8.0.1主从复制,一主三从,双主双从

这里是mysql8.0的主从复制,mysql8.0的语法,比之前更改了很多,我在进行配置的时候也掉了一个个的坑。

注意,我这个配置会导致原先3306的mysql服务启动不了,如果原先3306数据库有信息的话请先备份然后导入3307或其他端口数据库

 

一:一主三从

1:在mysql中的data中创建4个目录:3307,3308,3309,3310 

windows10下进行mysql8.0.1主从复制,一主三从,双主双从_第1张图片


2:初始化四个目录:

basedir是mysql的安装目录

datadir是你创建的3307-3310的目录


mysqld --initialize-insecure --basedir=D:/mysql/mysql-8.0.11-winx64  --datadir=D:/mysql/mysql-8.0.11-winx64/Data/3307 --user=mysql


3:在四个文件夹当中添加my.ini配置文件

   3307是主服务器,下面是他的配置文件

[mysqld]
# 设置3307端口
port=3307

# 设置mysql的安装目录
basedir=D:\mysql\mysql-8.0.11-winx64  
 
# 设置mysql数据库的数据的存放目录
datadir=D:\mysql\mysql-8.0.11-winx64\Data\3307

# 允许最大连接数
max_connections=200

# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10

# 服务端使用的字符集默认为UTF8
character-set-server=utf8

# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB

# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password

socket = D:\mysql\mysql-8.0.11-winx64\Data\3307\mysql.sock

log-error = D:\mysql\mysql-8.0.11-winx64\Data\3307\error.log

pid-file = D:\mysql\mysql-8.0.11-winx64\Data\3307\mysql.pid-file

lower_case_table-names = 1

autocommit = 1

#主从复制,表示启动二进制文件
log-bin = mysql-bin

#server编号,编号唯一 
server-id = 3307

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8

[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3307
default-character-set=utf8
socket = D:\mysql\mysql-8.0.11-winx64\Data\3307\mysql.sock

 

下面是3308-3310的从配置文件,只放一个,其他的请自己更改

[mysqld]
# 设置3308端口
port=3308

# 设置mysql的安装目录
basedir=D:\mysql\mysql-8.0.11-winx64  
 
# 设置mysql数据库的数据的存放目录
datadir=D:\mysql\mysql-8.0.11-winx64\Data\3308

# 允许最大连接数
max_connections=200

# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10

# 服务端使用的字符集默认为UTF8
character-set-server=utf8

# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB

# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password

socket = D:\mysql\mysql-8.0.11-winx64\Data\3308\mysql.sock

log-error = D:\mysql\mysql-8.0.11-winx64\Data\3308\error.log

pid-file = D:\mysql\mysql-8.0.11-winx64\Data\3308\mysql.pid-file

lower_case_table-names = 1

autocommit = 1

#server编号,编号唯一 
server-id = 3308

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8

[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3308
default-character-set=utf8
socket = D:\mysql\mysql-8.0.11-winx64\Data\3308\mysql.sock

4:使用指定的配置文件启动mysql,注册服务,然后再服务管理中启动服务

mysqld --install 3307 --defaults-file=D:\mysql\mysql-8.0.11-winx64\Data\3307\my.ini
mysqld --install 3308 --defaults-file=D:\mysql\mysql-8.0.11-winx64\Data\3308\my.ini
mysqld --install 3309 --defaults-file=D:\mysql\mysql-8.0.11-winx64\Data\3309\my.ini
mysqld --install 3310 --defaults-file=D:\mysql\mysql-8.0.11-winx64\Data\3310\my.ini

windows10下进行mysql8.0.1主从复制,一主三从,双主双从_第2张图片

注意,如果my.ini配置文件的一些路径或配置错误,会导致启动报错,请查看my.ini是否配置错误

 


5:登入mysql,修改密码,修改远程连接权限

mysql8的密码须有大小写数字和字符,如果密码为root或123456这种的会报错

修改密码

use mysql;
select user,host from user;
update user set host = '%' where user = 'root';
ALTER USER "root"@"%" IDENTIFIED  BY "[email protected]";
修改权限:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY'[email protected]';
    
    
6:在四个ini文件当中加入配置,然后重启服务

这个在我上面贴出的配置文件当中已经有了

3307主服务当中加入
    #主从复制,表示启动二进制文件
    log-bin = mysql-bin

    #server编号,编号唯一 
    server-id = 3307

3308,3309,3310加入
    #server编号,编号唯一 
    server-id = 3308,server-id = 3309,server-id = 3310
    
    
    
7:创建一个用于复制的账户

    CREATE USER 'copy'@'%' IDENTIFIED WITH mysql_native_password BY '[email protected]';
    GRANT REPLICATION SLAVE ON *.* TO 'copy'@'%';
    flush privileges;
    
8:查看主服务区的状态
    SHOW MASTER STATUS;
    
    +------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000001 |      805 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

正常

File是mysql-bin.000001
Position是154

Position不是初始值
执行  
reset master;
然后再次查看状态,这时我的初始值是155;


9:在从服务器当中执行命令
    1登录从mysql服务器
    2查询从服务器的状态 show slave status;
    3如果状态正常,可以不重置,查询的状态正常为Empty set
    
    4如果不正常,执行
    stop slave;
    reset slave;
    
10:在从服务器当中设置需要复制的主服务器信息

    CHANGE MASTER TO 
    MASTER_HOST='127.0.0.1',
    MASTER_USER='copy',
    MASTER_PORT=3307,
    MASTER_PASSWORD='[email protected]',
    MASTER_LOG_FILE='mysql-bin.000001',
    MASTER_LOG_POS=155;
    
    MASTER_HOST       为主服务器的ip地址
    MASTER_USER        主服务器的有复制权限的账号
    MASTER_PORT     链接的端口号
    MASTER_PASSWORD 密码
    MASTER_LOG_FILE 主服务器的文件名
    MASTER_LOG_POS  主服务器的偏移量
    
    执行开始复制的命令
     start slave;
    
11:查看主从服务的状态:
    show slave status\G
    
    看两个状态是否正确
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    
    如果不正确,请检查操作

12:测试:

在3307当中登录copy账号,然后创建数据库,表,数据,看看从服务器是否复制

如果在创建数据库时报

Access denied for user 'copy'@'%' to database 'mytest'

https://blog.csdn.net/roy_70/article/details/82669138

 

二:双主双从

1:四个文件夹的创建是一主三从的步骤

windows10下进行mysql8.0.1主从复制,一主三从,双主双从_第3张图片

2:创建ini文件。

3307配置文件:和一主三从的区别在添加的双主双从配置

#双主双从配置
#主键自增数
auto-increment_increment=2
#主键初始值
auto-increment_offset=1
#当为从时,从主数据库复制数据库后是否为自己的从数据库复制值
log-slave-updates
sync_binlog=1

 

#双主双从配置
[mysqld]
# 设置3307端口
port=3307

# 设置mysql的安装目录
basedir=D:\mysql\mysql-8.0.11-winx64  
 
# 设置mysql数据库的数据的存放目录
datadir=D:\mysql\mysql-8.0.11-winx64\Data\3307

# 允许最大连接数
max_connections=200

# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10

# 服务端使用的字符集默认为UTF8
character-set-server=utf8

# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB

# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password

socket = D:\mysql\mysql-8.0.11-winx64\Data\3307\mysql.sock

log-error = D:\mysql\mysql-8.0.11-winx64\Data\3307\error.log

pid-file = D:\mysql\mysql-8.0.11-winx64\Data\3307\mysql.pid-file

lower_case_table-names = 1

autocommit = 1

#主从复制,表示启动二进制文件
log-bin = mysql-bin

#server编号,编号唯一 
server-id = 3307


#双主双从配置
#主键自增数
auto-increment_increment=2
#主键初始值
auto-increment_offset=1
#当为从时,从主数据库复制数据库后是否为自己的从数据库复制值
log-slave-updates
sync_binlog=1

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8

[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3307
default-character-set=utf8
socket = D:\mysql\mysql-8.0.11-winx64\Data\3307\mysql.sock



3308配置文件:

#双主双从配置
[mysqld]
# 设置3308端口
port=3308

# 设置mysql的安装目录
basedir=D:\mysql\mysql-8.0.11-winx64  
 
# 设置mysql数据库的数据的存放目录
datadir=D:\mysql\mysql-8.0.11-winx64\Data\3308

# 允许最大连接数
max_connections=200

# 允许连接失败的次数。这是为了防止有人从该主机试图攻击数据库系统
max_connect_errors=10

# 服务端使用的字符集默认为UTF8
character-set-server=utf8

# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB

# 默认使用“mysql_native_password”插件认证
default_authentication_plugin=mysql_native_password

socket = D:\mysql\mysql-8.0.11-winx64\Data\3308\mysql.sock

log-error = D:\mysql\mysql-8.0.11-winx64\Data\3308\error.log

pid-file = D:\mysql\mysql-8.0.11-winx64\Data\3308\mysql.pid-file

lower_case_table-names = 1

autocommit = 1

#主从复制,表示启动二进制文件
log-bin = mysql-bin

#server编号,编号唯一 
server-id = 3308

#双主双从配置
auto-increment_increment=2
auto-increment_offset=2
log-slave-updates
sync_binlog=1

[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8

[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3308
default-character-set=utf8
socket = D:\mysql\mysql-8.0.11-winx64\Data\3308\mysql.sock



 

3309和3310的配置不变

3:配置主从复制

我前面是配置过一主三从的,所以一下操作都是一主三从改为双主双从的操作

1:停止所有的mysql服务,shutdwon;

2:在3307中执行

重置master的偏移量,当然可以不重置,那在从数据库配置主数据库的时候要相应更改参数

reset master;

3:在3308,3309,3310当中执行

stop slave;

reset slave;

4:之前3308是从数据库,那么我们要将3308变为主数据库,执行

查看master状态,然后重置

show master status;

reset master;

5:此时两个主数据库和两个从数据库已经准备好了,我们的

3308和3309是3307的从数据库

3307和3310是3308的从数据库

在3308和3309当中执行,参数更具你们自己的数据库相应调整

    CHANGE MASTER TO 
    MASTER_HOST='127.0.0.1',
    MASTER_USER='copy',
    MASTER_PORT=3307,
    MASTER_PASSWORD='[email protected]',
    MASTER_LOG_FILE='mysql-bin.000001',
    MASTER_LOG_POS=155;

在3307和3310当中执行

    CHANGE MASTER TO 
    MASTER_HOST='127.0.0.1',
    MASTER_USER='root',
    MASTER_PORT=3308,
    MASTER_PASSWORD='[email protected]',
    MASTER_LOG_FILE='mysql-bin.000001',
    MASTER_LOG_POS=155;

6:在所有数据库执行

start slave;

7:检查配置是否配置成功,在所有数据库执行

show slave status\G
    看两个状态是否正确
    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes

如果不是YES,执行 show master; 查看偏移量是否改变,如果改变,则将master重置,重新执行5操作

4:测试

先将3308数据库停止,然后在3307数据库当中创建数据库

3309是3307的从数据库,恢复至3307的操作,3308因为停止了数据库,所以3308,3310不会复制,

启动3308,此时如果3308和3310都复制了3307的操作,则配置成功

 

你可能感兴趣的:(mysql)