mysql配置读写分离


mysql安装,版本:8.0.27

主库的安装和从库的一样,唯一不一样的是server-id,这个必不能重复

如果已经通过zip安装了,可以先停止mysql服务,删除mysql服务,然后把data文件夹删了,按照下面来一遍就可以了,缺点是以前的数据都被删了,所以删除服务之前先把自己的要的数据先导出来保存,重新建立后再导回去

先在两服务器上通过zip的方式安装(两个服务器要能够相互通过3306 ping通,一般就是防火墙问题):

 

解压后建一个名为my.ini的文件,注意安装目录那块需要改

 

[mysqld]
#主库配置
server-id=1
#开启二进制日志
log_bin=master-bin
log_bin-index=master-bin.index
?
[mysql]
# 设置mysql客户端默认字符集
default-character-set = utf8mb4
?
[client]
default-character-set = utf8mb4
[mysqld]
#设置3306端口
port = 3306
# 设置mysql的安装目录
basedir=D:\allinstall\mysql-8.0.27-winx64
# 设置mysql数据库的数据的存放目录
datadir=D:\allinstall\mysql-8.0.27-winx64\data
# 允许最大连接数
max_connections=200
# 服务端使用的字符集默认为8比特编码的latin1字符集
character-set-server=utf8
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
max_allowed_packet=100M

以管理员的身份打开cmd,进入到解压缩的包的bin文件夹下面,执行以下命令(ini文件的路径填自己新建的那个,这里得改),执行完第一句后会有一个随机密码,登录是用那个:

mysqld --initialize --user=mysql --console
mysqld --install mysql-master --defaults-file="D:\allinstall\mysql-8.0.27-winx64\my.ini"
net start mysql-master
mysql -u root -P3307 -p

在mysql中执行(by 后面的root是新密码,自己改):

ALTER USER 'root'@'localhost' IDENTIFIED BY 'root';

主库创建一个用户来给从库同步数据

登录主库,创建用户,账号为xxyy,密码为root,自己定义一个就行。给新创建的用户授权,刷新权限,查看主库状态,得到一个表记录

CREATE USER 'xxyy'@'%' IDENTIFIED WITH mysql_native_password BY 'root';
GRANT REPLICATION SLAVE ON *.* TO 'xxyy'@'%';
flush privileges;
show master status;

从库配置

登录从库mysql,执行以下命令,下面的具体参数自己德重新改一下,MASTER_LOG_FILE、MASTER_LOG_POS分别是上面主表查看状态的file和position的内容

CHANGE MASTER TO MASTER_HOST='172.21.4.64',MASTER_PORT=3306,MASTER_USER='xxyy',MASTER_PASSWORD='root',MASTER_LOG_FILE='master-bin.000002',MASTER_LOG_POS=2570;
?
#开启同步
start slave;
?
#查看同步状态
show slave status\G;

这两个都为yes才算成功,因为我是虚拟机安装的,很容易休眠,所以这里变成了no,一般在服务器上面没有这种问题,1062下面一句就是没同步成功的保存,根据这个去解决问题