需要安装两个mysql服务,且版本一致。
我电脑上的两个服务端口分别是3306、3307
一、主数据库配置
[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=D:\Java\mysql-8.0.12-winx64
# 设置mysql数据库的数据的存放目录
datadir=D:\Java\mysql-8.0.12-winx64\data
# 允许最大连接数
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
log-bin=mysql-bin
server-id=1
#指定要复制的数据库
binlog-do-db=test1
#忽略指定数据库
#binlog-ignore-db=test1
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3306
default-character-set=utf8
server-id要和从库不一致。
binlog-do-db=test1是设置需要主从复制的数据库。
下面是配置过程
先cmd进入主库bin目录下,进入sql。
依次输入如下命令:
1、create user 'master'@'%'identified with mysql_native_password by 'pass';
这是创建一个用户给从库连接,master可随意更改。
2、GRANT REPLICATION SLAVE ON *.* TO 'master'@'%';
3、flush privileges;
4、show master status;
Position应该是2191,截图是之后截的,所以已经有部分数据写入进去了
窗口放着不要关闭,从库设置需要使用,重新打开一个cmd进行从库设置。
二、从库配置
从库配置如下:
[mysqld]
# 设置3307端口
port=3307
# 设置mysql的安装目录
basedir=C:\SoftWare\mysql-8.0.12-winx64
# 设置mysql数据库的数据的存放目录
datadir=C:\SoftWare\mysql-8.0.12-winx64\data
# 允许最大连接数
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
server-id=2
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3307
default-character-set=utf8
进入从库bin目录,登陆mysql。
输入命令:
change master to master_host='192.168.0.110', master_port=‘3306’,master_user='master',master_password='pass', master_log_file='mysql-bin.000031',master_log_pos=2191;
master_host是主库的ip, master_port是主库的端口号,默认是3306,master_user是主库设置的用户名,master_log_file和master_log_pos是主库设置中最后一个截图里面的数据。
输入
show slave status\G;
查看从库参数。
启动
start slave;
再次查看。
至此,主从配置完成。
遇到的问题
running没有启动。
方法:
- 先停掉slave:
stop slave
; set global sql_slave_skip_counter=1
;- 重新启动:
start slave
;