MySQL8.0.30一主两从复制与配置(一)

MySQL8.0.30一主两从复制与配置(一)_第1张图片

MySQL8.0.30一主两从复制与配置(一)_蜗牛杨哥的博客-CSDN博客

MySQL8.xx一主两从复制安装与配置

MySQL8.XX随未生成随机密码解决方案


MySQL8.0.30一主两从复制与配置(一)_第2张图片


本文主要对: MySQL8.xx安装与配置  的完善与补充

一: 搭建环境

    主机IP              端口              节点 备注
192.168.1.100              3306            master
192.168.1.101              3306             slave
192.168.1.102              3306             slave

二: 配置主|从节点my.cnf文件

2.1: 设置主节点: server-id,这个值不能和从节点一样,一般使用机器IP

# 配置服务ID
server-id=100
# 配置二进制日志目录
log-bin=/usr/local/mysql8/mysql-8.0.30/binlog
#主从复制忽略的数据库
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#开启主从复制的数据库
binlog-do-db=tope-pay-user
# bin log 日志格式
#STATEMENT:记录主库执行的SQL复制到从库; 调用时间函数时会导致主从数据不一致
#ROW:记录主库每一行的变化;效率低
#MIXED:修复一些主从数据不一致情况;本地变量调用还会存在问题;@@hostname
binlog_format=statement
#二进制日志自动删除/过期的天数。默认值为0,表示不自动删除
expire_logs_days=7
#跳过主从复制中遇到的所有错误或指定类型的错误
slave_skip_errors=1062

2.2: 设置主节点同步信息,不设置时,默认同步所有库的所有表

规则很多,这里只罗列几个常规的:

binlog-do-db    


 

需要同步的库名                备注
binlog-ignore-db     不需要同步的库名
replication-do-table    需要同步的表名,格式:库名.表名(test.t_table)
replication-ignore-table     不需要同步的表名,格式:库名.表名(test.t_table)

2.3:主节点上创建为从节点同步数据创建专属账号|设置权限

当然也可使用现有账号 例如账号:slave或者 replica: create user 'replica'@'%';

mysql> CREATE USER 'slave'@'%' IDENTIFIED WITH mysql_native_password BY 'mysql123456';
Query OK, 0 rows affected (0.01 sec)

mysql> GRANT REPLICATION SLAVE,replication client  ON *.* TO 'slave'@'%';
Query OK, 0 rows affected (0.00 sec)

mysql> 
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
 

2.4:配置完成后重启mysql服务器

[root@www ~]# systemctl restart mysql
[root@www ~]# systemctl status mysql
mysql.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysql.service; enabled; vendor preset: disabled)
   Active: active (running) since 二 2023-08-29 12:54:00 CST; 6s ago
     Docs: http://dev.mysql.com/doc/refman/en/using-systemd.html
 Main PID: 4550 (mysqld)
    Tasks: 39
   CGroup: /system.slice/mysql.service
           └─4550 /usr/local/mysql8/mysql-8.0.30/bin/mysqld --defaults-file=/etc/my.cnf

8月 29 12:54:00 www.yhchange.com systemd[1]: Started MySQL Server.
 

2.4: 查看master节点的偏移量|二进制文件名

mysql> show master status;
+---------------+----------+---------------+--------------------------+-------------------+
| File          | Position | Binlog_Do_DB  | Binlog_Ignore_DB         | Executed_Gtid_Set |
+---------------+----------+---------------+--------------------------+-------------------+
| binlog.000001 |      157 | tope-pay-user | mysql,information_schema |                   |
+---------------+----------+---------------+--------------------------+-------------------+
1 row in set (0.00 sec)
MySQL8.0.30一主两从复制与配置(一)_第3张图片


2.5: 配置从服务器的my.cnf文件

 #192.168.1.101 节点

# 服务id
server-id=101
#启用中继日志
relay-log=mysql-relay


#192.168.1.102 节点

# 服务id
server-id=102
#启用中继日志
relay-log=mysql-relay

2.6: 分别重启两台从服务器

[root@www ~]# systemctl restart mysql
[root@www ~]# systemctl status mysql
mysql.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysql.service; enabled; vendor preset: disabled)
   Active: active (running) since 二 2023-08-29 13:12:37 CST; 18s ago
     Docs: http://dev.mysql.com/doc/refman/en/using-systemd.html
 Main PID: 4093 (mysqld)
    Tasks: 39
   CGroup: /system.slice/mysql.service
           └─4093 /usr/local/mysql8/mysql-8.0.30/bin/mysqld --defaults-file=/etc/my.cnf

8月 29 13:12:37 www.yhchange.com systemd[1]: Started MySQL Server.
 

两台全新的从服务数据库状况:

[root@www ~]# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.30 MySQL Community Server - GPL

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| sys                |
+--------------------+
4 rows in set (0.02 sec)
 


2.7: 验证server-id配置是否成功

master:

mysql> show variables like '%server_id%';
+----------------+-------+
| Variable_name  | Value |
+----------------+-------+
| server_id      | 100   |
| server_id_bits | 32    |
+----------------+-------+
2 rows in set (0.06 sec)


slave:

mysql> show variables like '%server_id%';
+----------------+-------+
| Variable_name  | Value |
+----------------+-------+
| server_id      | 101   |
| server_id_bits | 32    |
+----------------+-------+
2 rows in set (0.04 sec)


mysql> show variables like '%server_id%';
+----------------+-------+
| Variable_name  | Value |
+----------------+-------+
| server_id      | 102   |
| server_id_bits | 32    |
+----------------+-------+
2 rows in set (0.02 sec)



 


三: 分别在从服务器同步主服务配置

3.1:在101与102从服务器节点执行如下命令

mysql> change master to master_host='192.168.1.100',master_user='slave',master_password='mysql123456',master_log_file='binlog.000001',master_log_pos=157;


Query OK, 0 rows affected, 8 warnings (0.03 sec)


注意这里的

master_host为主服务器的ip

master_user为连接主服务器的用户名

master_password为连接主服务器的密码

master_log_file为要同步的日志文件file,即对应上面主服务器查看时的File字段

master_log_pos为要同步日志文件的位置,即对应上面主服务器查看时的Position字段
 

3.2: 从服务上开启同步|slave 进程

mysql>  start slave;
Query OK, 0 rows affected, 1 warning (0.01 sec)
 


3.3: 查看 slave 状态 

mysql>   show slave status;
+----------------------------------+---------------+-------------+-------------+---------------+-----------------+---------------------+--------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+-------------------------------+---------------+---------------+----------------+----------------+-----------------------------+------------------+--------------------------------------+-------------------------+-----------+---------------------+----------------------------------------------------------+--------------------+-------------+-------------------------+--------------------------+----------------+--------------------+--------------------+-------------------+---------------+----------------------+--------------+--------------------+------------------------+-----------------------+-------------------+
| Slave_IO_State                   | Master_Host   | Master_User | Master_Port | Connect_Retry | Master_Log_File | Read_Master_Log_Pos | Relay_Log_File     | Relay_Log_Pos | Relay_Master_Log_File | Slave_IO_Running | Slave_SQL_Running | Replicate_Do_DB | Replicate_Ignore_DB | Replicate_Do_Table | Replicate_Ignore_Table | Replicate_Wild_Do_Table | Replicate_Wild_Ignore_Table | Last_Errno | Last_Error | Skip_Counter | Exec_Master_Log_Pos | Relay_Log_Space | Until_Condition | Until_Log_File | Until_Log_Pos | Master_SSL_Allowed | Master_SSL_CA_File | Master_SSL_CA_Path | Master_SSL_Cert | Master_SSL_Cipher | Master_SSL_Key | Seconds_Behind_Master | Master_SSL_Verify_Server_Cert | Last_IO_Errno | Last_IO_Error | Last_SQL_Errno | Last_SQL_Error | Replicate_Ignore_Server_Ids | Master_Server_Id | Master_UUID                          | Master_Info_File        | SQL_Delay | SQL_Remaining_Delay | Slave_SQL_Running_State                                  | Master_Retry_Count | Master_Bind | Last_IO_Error_Timestamp | Last_SQL_Error_Timestamp | Master_SSL_Crl | Master_SSL_Crlpath | Retrieved_Gtid_Set | Executed_Gtid_Set | Auto_Position | Replicate_Rewrite_DB | Channel_Name | Master_TLS_Version | Master_public_key_path | Get_master_public_key | Network_Namespace |
+----------------------------------+---------------+-------------+-------------+---------------+-----------------+---------------------+--------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+-------------------------------+---------------+---------------+----------------+----------------+-----------------------------+------------------+--------------------------------------+-------------------------+-----------+---------------------+----------------------------------------------------------+--------------------+-------------+-------------------------+--------------------------+----------------+--------------------+--------------------+-------------------+---------------+----------------------+--------------+--------------------+------------------------+-----------------------+-------------------+
| Waiting for source to send event | 192.168.1.100 | slave       |        3306 |            60 | binlog.000001   |                 157 | mysql-relay.000002 |           323 | binlog.000001         | Yes              | Yes               |                 |                     |                    |                        |                         |                             |          0 |            |            0 |                 157 |             529 | None            |                |             0 | No                 |                    |                    |                 |                   |                |                     0 | No                            |             0 |               |              0 |                |                             |              100 | d25ed6c6-3b31-11ee-8765-000c29dfccdb | mysql.slave_master_info |         0 |                NULL | Replica has read all relay log; waiting for more updates |              86400 |             |                         |                          |                |                    |                    |                   |             0 |                      |              |                    |                        |                     0 |                   |
+----------------------------------+---------------+-------------+-------------+---------------+-----------------+---------------------+--------------------+---------------+-----------------------+------------------+-------------------+-----------------+---------------------+--------------------+------------------------+-------------------------+-----------------------------+------------+------------+--------------+---------------------+-----------------+-----------------+----------------+---------------+--------------------+--------------------+--------------------+-----------------+-------------------+----------------+-----------------------+-------------------------------+---------------+---------------+----------------+----------------+-----------------------------+------------------+--------------------------------------+-------------------------+-----------+---------------------+----------------------------------------------------------+--------------------+-------------+-------------------------+--------------------------+----------------+--------------------+--------------------+-------------------+---------------+----------------------+--------------+--------------------+------------------------+-----------------------+-------------------+
1 row in set, 1 warning (0.00 sec)

mysql>  unlock tables;
Query OK, 0 rows affected (0.00 sec)
看见      Slave_IO_Running: Yes        Slave_SQL_Running: Yes       都为Yes则代表配置成功

MySQL8.0.30一主两从复制与配置(一)_第4张图片

四: 测试一波

4.1:在master节点创建存储过程:

delimiter $$
CREATE PROCEDURE pro_sys_index_sys_employer(num int)
BEGIN
  DECLARE count int  DEFAULT 0 ; -- 计数
    DECLARE max int ; -- 插入数据条数 num 记录条数
    SET max = num  ;
    -- 开始执行循环
    WHILE count < max  DO
    start transaction;
        INSERT INTO `sys_employer` ( `empno`, `ename`,`ejob`, `mgr`, `birthday`, `salary` , `compony`, `deptno`)
        VALUES    (( FLOOR(RAND()*805300 + RAND()*400530)),CONCAT('许总',(LAST_INSERT_ID()+1)),'恒大许老板',FLOOR(RAND()*100 + 205300),(date_add('1836-01-01', interval rand() * 31 day)),(RAND()*6530 + rand(1) * 10), CONCAT('北京市海淀区中关村创新文化交流中心',(LAST_INSERT_ID()+1)),(FLOOR(RAND()*300 + 6700)));             
    commit;
    SET count = count + 1;
    END WHILE;
END$$
delimiter ;

看看slave节点是否同步;先确认下从节点数据库数据为空;不未空则先删除

MySQL8.0.30一主两从复制与配置(一)_第5张图片

# 调用存储过程
call pro_sys_index_sys_employer(600);

4.2: 执行master节点后,查看从节点数据是否同步

 有数据,说明同步成功;MySQL8.0.30一主两从复制与配置(一)_第6张图片

 看看数据条数:与预期符合

MySQL8.0.30一主两从复制与配置(一)_第7张图片

4.3: 在主节点创建sys_user表;  看看是否同步到slave节点

CREATE TABLE `sys_user` (
  `userId` bigint NOT NULL AUTO_INCREMENT,
  `username` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`userId`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

 slave节点:

MySQL8.0.30一主两从复制与配置(一)_第8张图片

你可能感兴趣的:(服务器,运维)