Mysql主从怎么配置

Mysql主从怎么配置

引言

在这篇文章呢,我打算讲解一下mysql的主从配置,实现读写分离,提高数据库的性能。

Windows版

1.下载安装包

mysql下载地址:https://dev.mysql.com/downloads/mysql/

下载下来解压复制两个

2.配置主数据库

1.新建my.ini文件

设置端口为3306: 

[mysqld]

# 设置3306端口

port=3306

# 设置mysql的安装目录

basedir=F:\\mysql8

# 设置mysql数据库的数据的存放目录

datadir=F:\mysql8\\data

# 允许最大连接数

max_connections=200

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

max_connect_errors=10

# 服务端使用的字符集默认为UTF8

character-set-server=utf8

# 创建新表时将使用的默认存储引擎

default-storage-engine=INNODB

# 主库设置

#这个服务id每个数据库要设置不一样

server_id=1

log_bin=master-bin

log_bin-index=master-bin.index

#记录错误日志

log_error=F:\mysql8\\logerr

[mysql]

# 设置mysql客户端默认字符集

default-character-set=utf8

[client]

# 设置mysql客户端连接服务端时默认使用的端口

port=3306

default-character-set=utf8

以管理员方式打开cmd,切换到bin目录下

2.执行 生成data文件夹

mysqld --defaults-file=f:\mysql8\my.ini --initialize --console

执行完会在主数据库目录下生成一个data文件夹,红色框为初始密码,后续需要用到

3.安装mysql服务,主数据库命名为mysql

mysqld --install mysql --defaults-file=F:\mysql8\my.ini

4. 先不急着启动,检查注册表单里的ImagePath配置

找到HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\mysql

5.启动mysql服务

net start mysql

6.修改密码(需要用到上面的初始密码登录)

mysql -u root -p

修改为root

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

flush privileges;

3.配置从数据库(操作步骤一样,注意服务名称不同)

1.新建my.ini,设置端口为3309

[mysqld]

# 设置3309端口

port=3309

# 设置mysql的安装目录

basedir=F:\\mysql8-1

# 设置mysql数据库的数据的存放目录

datadir=F:\mysql8-1\\data

# 允许最大连接数

max_connections=200

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

max_connect_errors=10

# 服务端使用的字符集默认为UTF8

character-set-server=utf8

# 创建新表时将使用的默认存储引擎

default-storage-engine=INNODB

#从库配置

#服务id和主库不一样

server_id=2

log_error=F:\mysql8-1\\logerr

[mysql]

# 设置mysql客户端默认字符集

default-character-set=utf8

[client]

# 设置mysql客户端连接服务端时默认使用的端口

port=3309

default-character-set=utf8

2.执行 生成data文件夹

mysqld --defaults-file=F:\mysql8-1\my.ini --initialize --console

3.安装mysql服务,从数据库命名为mysql2

mysqld --install mysql2 --defaults-file=F:\mysql8-1\my.ini

4.启动mysql服务(服务名称为mysql2)

net start mysql2

5..修改从数据库密码

mysql -u root -p --protocol=tcp --host=localhost --port=3309

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

flush privileges;

4.主从数据库同步的设置

1.主数据库配置

进入mysql命令行

mysql -u root -p

创建用户设置密码

CREATE USER 'follow'@'%' IDENTIFIED WITH mysql_native_password BY 'follow';

并授予复制权限

grant replication slave on . to 'follow'@'%';

查看master 状态(红色圈住的需要在从数据库配置)

file同步的文件,position 同步的位置

show master status;

2.从数据库配置

进入mysql命令行

mysql -u root

配置主数据库信息(file和pos按照主库的信息配置,上面红色的地方)

mysql> change master to master_host='127.0.0.1',

-> master_port=3306,

-> master_user='follow',

-> master_password='follow',

-> master_log_file='master-bin.000002',

-> master_log_pos=1120;

启动从库slave进程

start slave

查看是否配置成功

show slave status \G;

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

Linux版

在linux操作系统中我推荐使用docker进行搭建

首先创建配置文件

# 创建主从数据库文件夹

mkdir -p /usr/local/mysql/master1/conf

mkdir -p /usr/local/mysql/master1/data

mkdir -p /usr/local/mysql/slave1/conf

mkdir -p /usr/local/mysql/slave1/data

# 初始化主数据库配置文件

cd /usr/local/mysql/master1/conf

vi my.cnf

# 粘贴以下内容

[mysqld]

datadir = /usr/local/mysql/master1/data

character-set-server = utf8

lower-case-table-names = 1

# 主从复制-主机配置# 主服务器唯一 ID

server-id = 1

# 启用二进制日志

log-bin=mysql-bin

# 设置logbin格式

binlog_format = STATEMENT

# 初始化从数据库配置文件

cd /usr/local/mysql/slave1/conf

vi my.cnf

# 粘贴以下内容

[mysqld]

datadir = /usr/local/mysql/slave1/data

character-set-server = utf8

lower-case-table-names = 1

# 主从复制-从机配置# 从服务器唯一 ID

server-id = 2

# 启用中继日志

relay-log = mysql-relay

# 文件夹授权

chmod -R 777 /usr/local/mysql

Docker 部署Mysql

# 拉取镜像

docker pull mysql:8.0# 查看镜像

docker images

# 构建主数据库容器

docker run --name=mysql-master-1 \

--privileged=true \

-p 8808:3306 \

-v /usr/local/mysql/master1/data/:/var/lib/mysql \

-v /usr/local/mysql/master1/conf/my.cnf:/etc/mysql/my.cnf \

-v /usr/local/mysql/master1/mysql-files/:/var/lib/mysql-files/ \

-e MYSQL_ROOT_PASSWORD=root \

-d mysql:8.0 --lower_case_table_names=1

docker ps

# 验证是否可以登录# 交互式进入容器

docker exec -it mysql-master-1 /bin/bash

# 登录

mysql -uroot -p

# 退出

quit

exit

# 构建从数据库容器

docker run --name=mysql-slave-1 \

--privileged=true \

-p 8809:3306 \

-v /usr/local/mysql/slave1/data/:/var/lib/mysql \

-v /usr/local/mysql/slave1/conf/my.cnf:/etc/mysql/my.cnf \

-v /usr/local/mysql/slave1/mysql-files/:/var/lib/mysql-files/ \

-e MYSQL_ROOT_PASSWORD=root \

-d mysql:8.0 --lower_case_table_names=1

编写主数据库的复制配置文件

- 主数据库创建用户slave 并授权

# 创建用户,设置主从同步的账户名

create user 'mysql-slave'@'%' identified with mysql_native_password

# 授权

grant replication slave on . to 'mysql-slave'@'%';

# 刷新权限

flush privileges;

# 查询server_id 值

show variables like 'server_id';

# 也可临时(重启后失效)指定server_id 的值(主从数据库的server_id 不能

相同)

set global server_id = 1;

# 查询Master状态,并记录File和Position 的值,这两个值用于和下边的从数

据库中的 change那条 sql 中

的 master_log_file,master_log_pos 参数对齐使用

show master status;

# 重置下master的binlog位点

reset master;

编写从数据库的复制配置文件

# 进入从数据库

# 注意:执行完此步骤后退出主数据库,防止再次操作导致 File和 Position 的值

发生变化# 验证slave 用户是否可用

# 查询server_id 值

show variables like 'server_id';

# 也可临时(重启后失效)指定server_id 的值(主从数据库的server_id 不能

相同)

set global server_id = 2;

# 若之前设置过同步,请先重置

stop slave;

reset slave;

# 设置主数据库

change master to master_host='主机的

ip',master_port=8808,master_user='mysql-

slave',master_password='root',master_log_file='mysql-

bin.000001',master_log_pos=156;

# 开始同步

start slave;

# 若出现错误,则停止同步,重置后再次启动

stop slave;

reset slave;

start slave;

# 查询Slave 状态

show slave status;

最后需要查看是否配置成功# 查看参数 Slave_IO_Running 和 Slave_SQL_Running 是否都为

yes,则证明配置成功。若为no,则需要查看对应的 Last_IO_Error 或 Last_SQL_Error 的异

常值。

验收

我在主节点 添加了这个 nacos库 在从节点也跟着生成了

LICENSED UNDER CC BY-NC-SA 4.0