mysql-8.4.4-winx64.zip主从同步
mysql-8.4.4-winx64.zip主从同步
1、安装主库
- 解压zip包
如目录D:\develop\mysql-8.4.4-winx64,在此目录中新建配置文件my.ini内容如下,注意需要更改目录
[mysqld]
# 设置3306端口
port=3306
# 设置mysql的安装目录
basedir=D:\develop\mysql-8.4.4-winx64
# 设置mysql数据库的数据的存放目录
datadir=D:\develop\mysql-8.4.4-winx64\data
# 允许最大连接数
max_connections=200
# 允许连接失败的次数。
max_connect_errors=10
# 服务端使用的字符集默认为utf8mb4
character-set-server=utf8mb4
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
[mysql]
# 设置mysql客户端默认字符集
default-character-set=utf8mb4
#[client]
## 设置mysql客户端连接服务端时默认使用的端口
#port=3306
#default-character-set=utf8mb4
- 启动及初始化mysql
初始化命令如下
mysqld --initialize-insecure --user=mysql
初始化完后会自动创建data目录,然后启动mysql
mysqld --defaults-file="D:\develop\mysql-8.4.4-winx64\my.ini" --console
此时打开另外一个命令容器进到目录D:\develop\mysql-8.4.4-winx64\bin中执行命令,首次登录无密码
mysql -u root
登录成功后修改密码
alter user root@localhost identified by 'root123123';
flush privileges;
退出后重新登录就提示需要密码了
mysql -u root -p
2、安装从库
仿照主库安装方式安装从库,如果是同一台机器用来测试则更换端口
3、配置主从同步
- 主库配置(在my.ini配置项[mysqld]中增加以下配置)
# 服务器唯一 ID,必须为正整数
server-id = 1
# 开启二进制日志,用于记录数据库的变更
log-bin = mysql-bin
# 要复制的数据库,可根据实际情况修改
binlog-do-db = user
# 不复制的数据库,可按需添加多个
binlog-ignore-db = mysql
binlog-ignore-db = information_schema
binlog-ignore-db = performance_schema
binlog_format = ROW
binlog_row_image = FULL
gtid_mode = ON
enforce_gtid_consistency = ON
其中user表示需要同步的库名
重启mysql后使用命令show binary log status;
可查看binlog位置信息,需要特别注意,这个版本的命令已经改了,不再是show master status
了
mysql> show binary log status;
+------------------+----------+--------------+---------------------------------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+---------------------------------------------+-------------------+
| mysql-bin.000002 | 158 | user | mysql,information_schema,performance_schema | |
+------------------+----------+--------------+---------------------------------------------+-------------------+
1 row in set (0.00 sec)
mysql>
创建replica账户
CREATE USER 'repl_user'@'%' IDENTIFIED WITH mysql_native_password BY 'repl_123123';
GRANT REPLICATION SLAVE ON *.* TO 'repl_user'@'%';
FLUSH PRIVILEGES;
- 从库配置(在my.ini配置项[mysqld]中增加以下配置)
# 服务器唯一 ID,必须与主服务器不同
server-id = 2
log_bin = mysql-bin
relay_log = mysql-relay-bin
read_only = ON
gtid_mode = ON
enforce_gtid_consistency = ON
log_slave_updates = ON
重启从库,在从库中修改同步账户,其中192.168.1.9为主库ip
CHANGE REPLICATION SOURCE TO
SOURCE_HOST='192.168.1.9',
SOURCE_USER='repl_user',
SOURCE_PASSWORD='repl_123123',
SOURCE_AUTO_POSITION=1; -- 注意这里是1而不是位置号
启动复制
START REPLICA;
同时也可以停止或重置
STOP REPLICA;
RESET REPLICA;
使用show命令查看状态
show replica status\G;
mysql> show replica status\G;
*************************** 1. row ***************************
Replica_IO_State: Waiting for source to send event
Source_Host: 192.168.1.9
Source_User: repl_user
Source_Port: 3306
Connect_Retry: 60
Source_Log_File: mysql-bin.000002
Read_Source_Log_Pos: 198
Relay_Log_File: mysql-relay-bin.000003
Relay_Log_Pos: 415
Relay_Source_Log_File: mysql-bin.000002
Replica_IO_Running: Yes
Replica_SQL_Running: Yes
- 在主库创建user库,创建测试表并插入一些测试数据
创建user数据库
-- 创建名为 users 的表
CREATE TABLE users (
-- 用户 ID,整数类型,主键,自动递增
user_id INT PRIMARY KEY AUTO_INCREMENT,
-- 用户名,字符串类型,最大长度为 50,不能为空
username VARCHAR(50) NOT NULL,
-- 年龄,整数类型
age INT,
-- 邮箱,字符串类型,最大长度为 100,不能为空,且值唯一
email VARCHAR(100) NOT NULL
);
-- 插入单条记录
INSERT INTO users (username, age, email)
VALUES ('Alice', 25, 'alice@example.com');
-- 插入多条记录
INSERT INTO users (username, age, email)
VALUES
('Bob', 30, 'bob@example.com'),
('Charlie', 22, 'charlie@example.com'),
('David', 28, 'david@example.com');
-- 复制数据
insert into users(username,age,email) select username ,age,email from users;