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;