这里是mysql8.0的主从复制,mysql8.0的语法,比之前更改了很多,我在进行配置的时候也掉了一个个的坑。
注意,我这个配置会导致原先3306的mysql服务启动不了,如果原先3306数据库有信息的话请先备份然后导入3307或其他端口数据库
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
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
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
注意,如果my.ini配置文件的一些路径或配置错误,会导致启动报错,请查看my.ini是否配置错误
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
如果不正确,请检查操作
在3307当中登录copy账号,然后创建数据库,表,数据,看看从服务器是否复制
如果在创建数据库时报
https://blog.csdn.net/roy_70/article/details/82669138
1:四个文件夹的创建是一主三从的步骤
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的操作,则配置成功