[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv= NULL
symbolic-links=0
default-storage-engine = InnoDB # 默认存储引擎
server_id = 1010 # 服务器的唯一标识符
bind-address = 0.0.0.0 # 服务器监听的IP地址
port = 3306 # 服务器监听的端口号
character-set-server = utf8mb4 # 服务器使用的字符集
skip-external-locking # 不使用外部锁定
skip-name-resolve # 不进行域名解析
log-bin = mysql-bin # 启用二进制日志
log-bin-trust-function-creators = 1 # 允许二进制日志中记录函数创建的事件
max_connections = 2000 # 最大连接数
max_user_connections = 1000 # 单个用户最大连接数
max_connect_errors = 4000 # 最大连接错误数
wait_timeout = 300 # 空闲连接的超时时间
interactive_timeout = 600 # 交互式连接的超时时间
table_open_cache = 512 # 表缓存大小
max_allowed_packet = 32M # 最大允许的数据包大小
sort_buffer_size = 2M # 排序缓冲区大小
join_buffer_size = 2M # 连接缓冲区大小
thread_cache_size = 8 # 线程缓存大小
sync_binlog = 0 # 数据刷盘参数=0时,由文件系统控制写盘的频率,并发性能最好,但是意外丢失数据的风险最大
gtid_mode = ON # 开启GTID模式,用于自动处理复制中的事务
enforce_gtid_consistency = ON # GTID\_MODE 和 ENFORCE\_GTID\_CONSISTENCY 的设置是一致的,强制全局事务标识的一致性
# 日志设置
log-short-format = 1 # 使用短格式记录日志
slow_query_log # 启用慢查询日志
long_query_time = 2 # 慢查询的时间阈值
# 二进制日志设置
log_bin_trust_function_creators=1 # 允许二进制日志中记录函数创建的事件
binlog_format = MIXED # 二进制日志格式
binlog_expire_logs_seconds = 864000 # 二进制日志过期时间(单位:秒)
# InnoDB特定选项
innodb_buffer_pool_size = 4G # InnoDB缓冲池大小
innodb_thread_concurrency = 8 # InnoDB线程并发数
innodb_flush_method = O\_DIRECT # InnoDB刷新日志的方法
innodb_flush_log_at_trx_commit = 1 # 控制事务日志的同步方式
innodb_log_buffer_size = 128M # InnoDB日志缓冲区大小
innodb_log_file_size = 256M # InnoDB日志文件大小
innodb_log_files_in_group = 3 # InnoDB日志文件组中的文件数
innodb_max_dirty_pages_pct = 90 # InnoDB脏页的最大比例
innodb_lock_wait_timeout = 50 # InnoDB锁等待超时时间(单位:秒)
innodb_file_per_table = 1 # 每个表使用独立的表空间文件
plugin-load = rpl_semi_sync_master.so # 配置半同步复制
rpl_semi_sync_master_enabled = 1 # 开启半同步复制
rpl_semi_sync_master_timeout = 5000 # 配置主从同步超时时间(毫秒)
[mysqldump]
quick # 快速导出数据
max_allowed_packet = 16M # 最大允许的数据包大小
[myisamchk]
key_buffer_size = 256M # MyISAM键缓冲区大小
sort_buffer_size = 256M # MyISAM排序缓冲区大小
read_buffer = 2M # MyISAM读缓冲区大小
write_buffer = 2M # MyISAM写缓冲区大小
[mysqlhotcopy]
interactive-timeout = 3600 # 交互式超时时间,超时时间设置为 1 小时
授权启动
sudo chmod 644 /opt/software/mysqlcluster/master1/conf/my.cnf
启动运行,命令如下:
docker-compose up -d
docker-compose ps
复制配置文件my.cnf到容器中
docker cp /opt/software/mysqlcluster/master1/conf/my.cnf mysql_node1_master1:/etc/mysql/my.cnf
重启容器
docker restart mysql_node1_master1
进入主节点容器,命令如下:
docker exec -it mysql_node1_master1 bash
登录mysql,命令如下:
mysql -u root -pnode1master1root
参考server_id是否配置正确,判断my.cnf是否生效
SHOW VARIABLES LIKE 'server_id';
安装semisync_master模块,通过扩展库来安装半同步复制模块,需要指定扩展库的文件名,命令如下:
install plugin rpl_semi_sync_master soname 'semisync\_master.so';
查看系统全局参数,命令如下:
show global variables like 'rpl\_semi%';
输出结果如下:
mysql> show global variables like 'rpl_semi%';
+-------------------------------------------+------------+
| Variable_name | Value |
+-------------------------------------------+------------+
| rpl_semi_sync_master_enabled | OFF |
| rpl_semi_sync_master_timeout | 10000 |
| rpl_semi_sync_master_trace_level | 32 |
| rpl_semi_sync_master_wait_for_slave_count | 1 |
| rpl_semi_sync_master_wait_no_slave | ON |
| rpl_semi_sync_master_wait_point | AFTER_SYNC |
+-------------------------------------------+------------+
6 rows in set (0.00 sec)
rpl_semi_sync_master_timeout就是半同步复制时等待应答的最长等待时间,默认是10秒,可以根据情况自行调整。rpl_semi_sync_master_wait_point其实表示一种半同步复制的方式。半同步复制有两种方式,一种是我们现在看到的这种默认的AFTER_SYNC方式。这种方式下,主库把日志写入binlog,并且复制给从库,然后开始等待从库的响应。从库返回成功后,主库再提交事务,接着给客户端返回一个成功响应。而另一种方式是叫做AFTER_COMMIT方式。他不是默认的。这种方式,在主库写入binlog后,等待binlog复制到从库,主库就提交自己的本地事务,再等待从库返回给自己一个成功响应,然后主库再给客户端返回响应。
打开半同步复制的开关,命令如下:
set global rpl\_semi\_sync\_master\_enabled=ON;
授权,命令如下:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'node1master1root';
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'node1master1root';
FLUSH PRIVILEGES;
查看master节点状态
show master status;
输出结果:
mysql> show master status;
+------------------+----------+--------------+------------------+------------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+------------------------------------------+
| mysql-bin.000003 | 196 | | | 7410e8b2-e12b-11ee-9499-0242ac160002:1-3 |
+------------------+----------+--------------+------------------+------------------------------------------+
1 row in set (0.00 sec)
mysql>
重启master节点的mysql服务,命令如下:
docker restart mysql_node1_master1
部署node2节点的master2
docker-compose.yaml文件
编辑docker-compose.yaml文件,代码如下:
mkdir /opt/software/mysqlcluster/master2
cd /opt/software/mysqlcluster/master2
vi docker-compose.yaml
文件内容,代码如下:
version: '3' # 使用docker-compose版本3
services: # 定义服务
mysql_master: # 定义一个名为mysql\_master的服务
image: mysql:8.0.20 # 使用MySQL 8.0.20镜像
container_name: mysql_node2_master2 # 指定容器名称为mysql\_node2\_master2
restart: unless-stopped # 在容器退出时自动重新启动
ports: # 定义容器和主机之间的端口映射
- "33062:3307" # 将容器的3306端口映射到主机的33064端口
environment: # 定义环境变量
MYSQL_ROOT_PASSWORD: node2master2root # 设置root用户的密码
volumes: # 定义数据卷
- /var/lib/mysql:/var/lib/mysql # 数据目录
healthcheck:
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost", "-u", "root", "-pnode2master2root"] # 设置容器健康检查命令
interval: 20s # 每隔20秒进行一次健康检查
timeout: 10s # 健康检查超时时间为10秒
retries: 3 # 健康检查失败时重试次数为3次
授权文件
sudo chmod 777 docker-compose.yaml
sudo chmod -R 755 /var/lib/mysql/
mkdir /opt/software/mysqlcluster/master2/conf
vi /opt/software/mysqlcluster/master2/conf/my.cnf
my.cnf文件
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv= NULL
symbolic-links=0
default-storage-engine = InnoDB # 默认存储引擎
server_id = 1020 # 服务器的唯一标识符
bind-address = 0.0.0.0 # 服务器监听的IP地址
port = 3307 # 服务器监听的端口号
character-set-server = utf8mb4 # 服务器使用的字符集
skip-external-locking # 不使用外部锁定
skip-name-resolve # 不进行域名解析
log-bin = mysql-bin # 启用二进制日志
log-bin-trust-function-creators = 1 # 允许二进制日志中记录函数创建的事件
max_connections = 2000 # 最大连接数
max_user_connections = 1000 # 单个用户最大连接数
max_connect_errors = 4000 # 最大连接错误数
wait_timeout = 300 # 空闲连接的超时时间
interactive_timeout = 600 # 交互式连接的超时时间
table_open_cache = 512 # 表缓存大小
max_allowed_packet = 32M # 最大允许的数据包大小
sort_buffer_size = 2M # 排序缓冲区大小
join_buffer_size = 2M # 连接缓冲区大小
thread_cache_size = 8 # 线程缓存大小
sync_binlog = 0 # 数据刷盘参数=0时,由文件系统控制写盘的频率,并发性能最好,但是意外丢失数据的风险最大
gtid_mode = ON # 开启GTID模式,用于自动处理复制中的事务
enforce_gtid_consistency = ON # GTID\_MODE 和 ENFORCE\_GTID\_CONSISTENCY 的设置是一致的,强制全局事务标识的一致性
# 日志设置
log-short-format = 1 # 使用短格式记录日志
slow_query_log # 启用慢查询日志
long_query_time = 2 # 慢查询的时间阈值
# 二进制日志设置
log_bin_trust_function_creators=1 # 允许二进制日志中记录函数创建的事件
binlog_format = MIXED # 二进制日志格式
binlog_expire_logs_seconds = 864000 # 二进制日志过期时间(单位:秒)
# InnoDB特定选项
innodb_buffer_pool_size = 4G # InnoDB缓冲池大小
innodb_thread_concurrency = 8 # InnoDB线程并发数
innodb_flush_method = O\_DIRECT # InnoDB刷新日志的方法
innodb_flush_log_at_trx_commit = 1 # 控制事务日志的同步方式
innodb_log_buffer_size = 128M # InnoDB日志缓冲区大小
innodb_log_file_size = 256M # InnoDB日志文件大小
innodb_log_files_in_group = 3 # InnoDB日志文件组中的文件数
innodb_max_dirty_pages_pct = 90 # InnoDB脏页的最大比例
innodb_lock_wait_timeout = 50 # InnoDB锁等待超时时间(单位:秒)
innodb_file_per_table = 1 # 每个表使用独立的表空间文件
plugin-load = rpl_semi_sync_master.so # 配置半同步复制
rpl_semi_sync_master_enabled = 1 # 开启半同步复制
rpl_semi_sync_master_timeout = 5000 # 配置主从同步超时时间(毫秒)
[mysqldump]
quick # 快速导出数据
max_allowed_packet = 16M # 最大允许的数据包大小
[myisamchk]
key_buffer_size = 256M # MyISAM键缓冲区大小
sort_buffer_size = 256M # MyISAM排序缓冲区大小
read_buffer = 2M # MyISAM读缓冲区大小
write_buffer = 2M # MyISAM写缓冲区大小
[mysqlhotcopy]
interactive-timeout = 3600 # 交互式超时时间,超时时间设置为 1 小时
授权启动
sudo chmod 644 /opt/software/mysqlcluster/master2/conf/my.cnf
sudo chmod 644 /var/lib/mysql
启动运行,命令如下:
docker-compose up -d
docker-compose ps
复制配置文件my.cnf到容器中
docker cp /opt/software/mysqlcluster/master2/conf/my.cnf mysql_node2_master2:/etc/mysql/my.cnf
重启容器
docker restart mysql_node2_master2
进入主节点容器,命令如下:
docker exec -it mysql_node2_master2 bash
登录mysql,命令如下:
mysql -u root -pnode2master2root
参考server_id是否配置正确,判断my.cnf是否生效
SHOW VARIABLES LIKE 'server_id';
安装semisync_master模块,通过扩展库来安装半同步复制模块,需要指定扩展库的文件名,命令如下:
install plugin rpl_semi_sync_master soname 'semisync\_master.so';
查看系统全局参数,命令如下:
show global variables like 'rpl\_semi%';
输出结果如下:
mysql> show global variables like 'rpl_semi%';
+-------------------------------------------+------------+
| Variable_name | Value |
+-------------------------------------------+------------+
| rpl_semi_sync_master_enabled | OFF |
| rpl_semi_sync_master_timeout | 10000 |
| rpl_semi_sync_master_trace_level | 32 |
| rpl_semi_sync_master_wait_for_slave_count | 1 |
| rpl_semi_sync_master_wait_no_slave | ON |
| rpl_semi_sync_master_wait_point | AFTER_SYNC |
+-------------------------------------------+------------+
6 rows in set (0.00 sec)
rpl_semi_sync_master_timeout就是半同步复制时等待应答的最长等待时间,默认是10秒,可以根据情况自行调整。rpl_semi_sync_master_wait_point其实表示一种半同步复制的方式。半同步复制有两种方式,一种是我们现在看到的这种默认的AFTER_SYNC方式。这种方式下,主库把日志写入binlog,并且复制给从库,然后开始等待从库的响应。从库返回成功后,主库再提交事务,接着给客户端返回一个成功响应。而另一种方式是叫做AFTER_COMMIT方式。他不是默认的。这种方式,在主库写入binlog后,等待binlog复制到从库,主库就提交自己的本地事务,再等待从库返回给自己一个成功响应,然后主库再给客户端返回响应。
打开半同步复制的开关,命令如下:
set global rpl\_semi\_sync\_master\_enabled=ON;
授权,命令如下:
SELECT user, host, plugin FROM mysql.user WHERE user = 'root';
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'node2master2root';
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'node2master2root';
FLUSH PRIVILEGES;
SELECT user, host, plugin FROM mysql.user WHERE user = 'root';
查看master节点状态
show master status;
输出结果:
mysql> show master status;
+------------------+----------+--------------+------------------+------------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+------------------------------------------+
| mysql-bin.000003 | 196 | | | 0b986205-e1b3-11ee-adae-0242ac170002:1-3 |
+------------------+----------+--------------+------------------+------------------------------------------+
1 row in set (0.00 sec)
mysql>
部署node3节点的部署master3
docker-compose.yaml文件
编辑docker-compose.yaml文件,代码如下:
mkdir /opt/software/mysqlcluster/master3
cd /opt/software/mysqlcluster/master3
vi docker-compose.yaml
文件内容,代码如下:
version: '3' # 使用docker-compose版本3
services: # 定义服务
mysql_master: # 定义一个名为mysql\_master的服务
image: mysql:8.0.20 # 使用MySQL 8.0.20镜像
container_name: mysql_node3_master3 # 指定容器名称为mysql\_node3\_master3
restart: unless-stopped # 在容器退出时自动重新启动
ports: # 定义容器和主机之间的端口映射
- "33063:3308" # 将容器的3306端口映射到主机的33064端口
environment: # 定义环境变量
MYSQL_ROOT_PASSWORD: node3master3root # 设置root用户的密码
volumes: # 定义数据卷
- /var/lib/mysql3:/var/lib/mysql # 数据目录
healthcheck:
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost", "-u", "root", "-pnode3master3root"] # 设置容器健康检查命令
interval: 20s # 每隔20秒进行一次健康检查
timeout: 10s # 健康检查超时时间为10秒
retries: 3 # 健康检查失败时重试次数为3次
授权文件
sudo chmod 777 docker-compose.yaml
mkdir /opt/software/mysqlcluster/master3/conf
vi /opt/software/mysqlcluster/master3/conf/my.cnf
my.cnf文件
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv= NULL
symbolic-links=0
default-storage-engine = InnoDB # 默认存储引擎
server_id = 1030 # 服务器的唯一标识符
bind-address = 0.0.0.0 # 服务器监听的IP地址
port = 3308 # 服务器监听的端口号
character-set-server = utf8mb4 # 服务器使用的字符集
skip-external-locking # 不使用外部锁定
skip-name-resolve # 不进行域名解析
log-bin = mysql-bin # 启用二进制日志
log-bin-trust-function-creators = 1 # 允许二进制日志中记录函数创建的事件
max_connections = 2000 # 最大连接数
max_user_connections = 1000 # 单个用户最大连接数
max_connect_errors = 4000 # 最大连接错误数
wait_timeout = 300 # 空闲连接的超时时间
interactive_timeout = 600 # 交互式连接的超时时间
table_open_cache = 512 # 表缓存大小
max_allowed_packet = 32M # 最大允许的数据包大小
sort_buffer_size = 2M # 排序缓冲区大小
join_buffer_size = 2M # 连接缓冲区大小
thread_cache_size = 8 # 线程缓存大小
sync_binlog = 0 # 数据刷盘参数=0时,由文件系统控制写盘的频率,并发性能最好,但是意外丢失数据的风险最大
gtid_mode = ON # 开启GTID模式,用于自动处理复制中的事务
enforce_gtid_consistency = ON # GTID\_MODE 和 ENFORCE\_GTID\_CONSISTENCY 的设置是一致的,强制全局事务标识的一致性
# 日志设置
log-short-format = 1 # 使用短格式记录日志
slow_query_log # 启用慢查询日志
long_query_time = 2 # 慢查询的时间阈值
# 二进制日志设置
log_bin_trust_function_creators=1 # 允许二进制日志中记录函数创建的事件
binlog_format = MIXED # 二进制日志格式
binlog_expire_logs_seconds = 864000 # 二进制日志过期时间(单位:秒)
# InnoDB特定选项
innodb_buffer_pool_size = 4G # InnoDB缓冲池大小
innodb_thread_concurrency = 8 # InnoDB线程并发数
innodb_flush_method = O\_DIRECT # InnoDB刷新日志的方法
innodb_flush_log_at_trx_commit = 1 # 控制事务日志的同步方式
innodb_log_buffer_size = 128M # InnoDB日志缓冲区大小
innodb_log_file_size = 256M # InnoDB日志文件大小
innodb_log_files_in_group = 3 # InnoDB日志文件组中的文件数
innodb_max_dirty_pages_pct = 90 # InnoDB脏页的最大比例
innodb_lock_wait_timeout = 50 # InnoDB锁等待超时时间(单位:秒)
innodb_file_per_table = 1 # 每个表使用独立的表空间文件
plugin-load = rpl_semi_sync_master.so # 配置半同步复制
rpl_semi_sync_master_enabled = 1 # 开启半同步复制
rpl_semi_sync_master_timeout = 5000 # 配置主从同步超时时间(毫秒)
[mysqldump]
quick # 快速导出数据
max_allowed_packet = 16M # 最大允许的数据包大小
[myisamchk]
key_buffer_size = 256M # MyISAM键缓冲区大小
sort_buffer_size = 256M # MyISAM排序缓冲区大小
read_buffer = 2M # MyISAM读缓冲区大小
write_buffer = 2M # MyISAM写缓冲区大小
[mysqlhotcopy]
interactive-timeout = 3600 # 交互式超时时间,超时时间设置为 1 小时
授权启动
sudo chmod 644 /opt/software/mysqlcluster/master3/conf/my.cnf
启动运行,命令如下:
docker-compose up -d
docker-compose ps
复制配置文件my.cnf到容器中
docker cp /opt/software/mysqlcluster/master3/conf/my.cnf mysql_node3_master3:/etc/mysql/my.cnf
重启容器
docker restart mysql_node3_master3
进入主节点容器,命令如下:
docker exec -it mysql_node3_master3 bash
登录mysql,命令如下:
mysql -u root -pnode3master3root
参考server_id是否配置正确,判断my.cnf是否生效
SHOW VARIABLES LIKE 'server_id';
安装semisync_master模块,通过扩展库来安装半同步复制模块,需要指定扩展库的文件名,命令如下:
install plugin rpl_semi_sync_master soname 'semisync\_master.so';
查看系统全局参数,命令如下:
show global variables like 'rpl\_semi%';
输出结果如下:
mysql> show global variables like 'rpl_semi%';
+-------------------------------------------+------------+
| Variable_name | Value |
+-------------------------------------------+------------+
| rpl_semi_sync_master_enabled | OFF |
| rpl_semi_sync_master_timeout | 10000 |
| rpl_semi_sync_master_trace_level | 32 |
| rpl_semi_sync_master_wait_for_slave_count | 1 |
| rpl_semi_sync_master_wait_no_slave | ON |
| rpl_semi_sync_master_wait_point | AFTER_SYNC |
+-------------------------------------------+------------+
6 rows in set (0.00 sec)
rpl_semi_sync_master_timeout就是半同步复制时等待应答的最长等待时间,默认是10秒,可以根据情况自行调整。rpl_semi_sync_master_wait_point其实表示一种半同步复制的方式。半同步复制有两种方式,一种是我们现在看到的这种默认的AFTER_SYNC方式。这种方式下,主库把日志写入binlog,并且复制给从库,然后开始等待从库的响应。从库返回成功后,主库再提交事务,接着给客户端返回一个成功响应。而另一种方式是叫做AFTER_COMMIT方式。他不是默认的。这种方式,在主库写入binlog后,等待binlog复制到从库,主库就提交自己的本地事务,再等待从库返回给自己一个成功响应,然后主库再给客户端返回响应。
打开半同步复制的开关,命令如下:
set global rpl\_semi\_sync\_master\_enabled=ON;
授权,命令如下:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'node3master3root';
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'node3master3root';
FLUSH PRIVILEGES;
查看master节点状态
show master status;
输出结果:
mysql> show master status;
+------------------+----------+--------------+------------------+------------------------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+------------------------------------------+
| mysql-bin.000005 | 196 | | | 2f0d2880-e12d-11ee-9b42-0242ac1b0002:1-3 |
+------------------+----------+--------------+------------------+------------------------------------------+
1 row in set (0.00 sec)
mysql>
配置三个主节点互为主从,主从同步配置
在master1上配置master3为主节点
CHANGE MASTER TO
MASTER\_HOST='192.168.80.103',
MASTER\_PORT=33063,
MASTER\_USER='root',
MASTER\_PASSWORD='node3master3root',
MASTER\_LOG\_FILE='mysql-bin.000005',
MASTER\_LOG\_POS=196;
开启主从配置,查看从节点状态,命令如下:
START SLAVE;
show slave status\G;
只要Slave_IO_Running: Yes和Slave_SQL_Running: Yes主从同步配置就好了。
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.80.103
Master_User: root
Master_Port: 33063
Connect_Retry: 60
Master_Log_File: mysql-bin.000005
Read_Master_Log_Pos: 196
Relay_Log_File: 2c79ab730c50-relay-bin.000007
Relay_Log_Pos: 324
Relay_Master_Log_File: mysql-bin.000005
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 196
Relay_Log_Space: 708
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1030
Master_UUID: 2f0d2880-e12d-11ee-9b42-0242ac1b0002
Master_Info_File: mysql.slave_master_info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set: 7410e8b2-e12b-11ee-9499-0242ac160002:1-3
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
Master_public_key_path:
Get_master_public_key: 0
Network_Namespace:
1 row in set (0.00 sec)
ERROR:
No query specified
mysql>
在master2上配置master1为主节点
CHANGE MASTER TO
MASTER\_HOST='192.168.80.101',
MASTER\_PORT=33061,
MASTER\_USER='root',
MASTER\_PASSWORD='node1master1root',
MASTER\_LOG\_FILE='mysql-bin.000003',
MASTER\_LOG\_POS=196;
开启主从配置,查看从节点状态,命令如下:
START SLAVE;
show slave status\G;
只要Slave_IO_Running: Yes和Slave_SQL_Running: Yes主从同步配置就好了。
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.80.101
Master_User: root
Master_Port: 33061
Connect_Retry: 60
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 196
Relay_Log_File: 1535e4aba6d5-relay-bin.000002
Relay_Log_Pos: 324
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 196
Relay_Log_Space: 540
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1010
Master_UUID: 7410e8b2-e12b-11ee-9499-0242ac160002
Master_Info_File: mysql.slave_master_info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set: 0b986205-e1b3-11ee-adae-0242ac170002:1-3
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
Master_public_key_path:
Get_master_public_key: 0
Network_Namespace:
1 row in set (0.00 sec)
ERROR:
No query specified
mysql>
在master3上配置master2为主节点
CHANGE MASTER TO
MASTER\_HOST='192.168.80.102',
MASTER\_PORT=33062,
MASTER\_USER='root',
MASTER\_PASSWORD='node2master2root',
MASTER\_LOG\_FILE='mysql-bin.000003',
MASTER\_LOG\_POS=196;
开启主从配置,查看从节点状态,命令如下:
START SLAVE;
show slave status\G;
只要Slave_IO_Running: Yes和Slave_SQL_Running: Yes主从同步配置就好了。
mysql> show slave status\G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.80.102
Master_User: root
Master_Port: 33062
Connect_Retry: 60
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 196
Relay_Log_File: 5393cf023082-relay-bin.000002
Relay_Log_Pos: 324
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 196
Relay_Log_Space: 540
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 0
Last_SQL_Error:
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1020
Master_UUID: 0b986205-e1b3-11ee-adae-0242ac170002
Master_Info_File: mysql.slave_master_info
SQL_Delay: 0
SQL_Remaining_Delay: NULL
Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
Master_Retry_Count: 86400
Master_Bind:
Last_IO_Error_Timestamp:
Last_SQL_Error_Timestamp:
Master_SSL_Crl:
Master_SSL_Crlpath:
Retrieved_Gtid_Set:
Executed_Gtid_Set: 2f0d2880-e12d-11ee-9b42-0242ac1b0002:1-3
Auto_Position: 0
Replicate_Rewrite_DB:
Channel_Name:
Master_TLS_Version:
Master_public_key_path:
Get_master_public_key: 0
Network_Namespace:
1 row in set (0.00 sec)
ERROR:
No query specified
mysql>
三主三从,互为主从节点。master1作为master2的主节点,master2作为master3的主节点,master3作为master1的主节点,接下来,就是将从节点进行扩容。
部署node1节点的slave1
docker-compose.yaml文件
编辑docker-compose.yaml文件,代码如下:
mkdir /var/lib/mysqlslave
ls -ld /var/lib/mysqlslave/
chmod 755 /var/lib/mysqlslave/
ls -ld /var/lib/mysqlslave/
mkdir /opt/software/mysqlcluster/slave1
cd /opt/software/mysqlcluster/slave1
vi docker-compose.yaml
文件内容,代码如下:
version: '3' # 使用docker-compose版本3
services: # 定义服务
mysql_master: # 定义一个名为mysql\_master的服务
image: mysql:8.0.20 # 使用MySQL 8.0.20镜像
container_name: mysql_node1_slave1 # 指定容器名称为mysql\_node2\_slave1
restart: unless-stopped # 在容器退出时自动重新启动
ports: # 定义容器和主机之间的端口映射
- "33064:3309" # 将容器的3306端口映射到主机的33061端口
environment: # 定义环境变量
MYSQL_ROOT_PASSWORD: node1slave1root # 设置root用户的密码
volumes: # 定义数据卷
- /var/lib/mysqlslave:/var/lib/mysql # 数据目录
healthcheck:
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost", "-u", "root", "-pnode1slave1root"] # 设置容器健康检查命令
interval: 20s # 每隔20秒进行一次健康检查
timeout: 10s # 健康检查超时时间为10秒
retries: 3 # 健康检查失败时重试次数为3次
授权文件
sudo chmod 777 docker-compose.yaml
mkdir /opt/software/mysqlcluster/slave1/conf
vi /opt/software/mysqlcluster/slave1/conf/my.cnf
my.cnf文件
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv= NULL
symbolic-links=0
default-storage-engine = InnoDB # 默认存储引擎
server_id = 1011 # 服务器的唯一标识符
bind-address = 0.0.0.0 # 服务器监听的IP地址
port = 3309 # 服务器监听的端口号
character-set-server = utf8mb4 # 服务器使用的字符集
skip-external-locking # 不使用外部锁定
skip-name-resolve # 不进行域名解析
relay_log = relay-log # 开启中继日志
relay_log_index = slave-relay-bin.index # 设置中继日志索引的文件名
read_only = ON # 启用只读属性
relay_log_purge = 0 # 是否自动清空不再需要中继日志
log_slave_updates=1 # 开启从服务器记录二进制日志更新的功能
max_connections = 2000 # 最大连接数
max_user_connections = 1000 # 单个用户最大连接数
max_connect_errors = 4000 # 最大连接错误数
wait_timeout = 300 # 空闲连接的超时时间
interactive_timeout = 600 # 交互式连接的超时时间
table_open_cache = 512 # 表缓存大小
max_allowed_packet = 32M # 最大允许的数据包大小
sort_buffer_size = 2M # 排序缓冲区大小
join_buffer_size = 2M # 连接缓冲区大小
thread_cache_size = 8 # 线程缓存大小
sync_binlog = 0 # 数据刷盘参数=0时,由文件系统控制写盘的频率,并发性能最好,但是意外丢失数据的风险最大
gtid_mode = ON # 开启GTID模式,用于自动处理复制中的事务
enforce_gtid_consistency = ON # GTID\_MODE 和 ENFORCE\_GTID\_CONSISTENCY 的设置是一致的,强制全局事务标识的一致性
# 日志设置
log-short-format = 1 # 使用短格式记录日志
slow_query_log # 启用慢查询日志
long_query_time = 2 # 慢查询的时间阈值
# 二进制日志设置
binlog_format = MIXED # 二进制日志格式
binlog_expire_logs_seconds = 864000 # 二进制日志过期时间(单位:秒)
# InnoDB特定选项
innodb_buffer_pool_size = 4G # InnoDB缓冲池大小
innodb_thread_concurrency = 8 # InnoDB线程并发数
innodb_flush_method = O\_DIRECT # InnoDB刷新日志的方法
innodb_flush_log_at_trx_commit = 1 # 控制事务日志的同步方式
innodb_log_buffer_size = 128M # InnoDB日志缓冲区大小
innodb_log_file_size = 256M # InnoDB日志文件大小
innodb_log_files_in_group = 3 # InnoDB日志文件组中的文件数
innodb_max_dirty_pages_pct = 90 # InnoDB脏页的最大比例
innodb_lock_wait_timeout = 50 # InnoDB锁等待超时时间(单位:秒)
innodb_file_per_table = 1 # 每个表使用独立的表空间文件
plugin-load = semisync_slave.so # 半同步复制
rpl_semi_sync_slave_enabled = 1 # 开启半同步复制
[mysqldump]
quick # 快速导出数据
max_allowed_packet = 16M # 最大允许的数据包大小
[myisamchk]
key_buffer_size = 256M # MyISAM键缓冲区大小
sort_buffer_size = 256M # MyISAM排序缓冲区大小
read_buffer = 2M # MyISAM读缓冲区大小
write_buffer = 2M # MyISAM写缓冲区大小
[mysqlhotcopy]
interactive-timeout = 3600 # 交互式超时时间,超时时间设置为 1 小时
授权启动
sudo chmod 644 /opt/software/mysqlcluster/slave1/conf/my.cnf
启动运行,命令如下:
docker-compose up -d
docker-compose ps
复制配置文件my.cnf到容器中
docker cp /opt/software/mysqlcluster/slave1/conf/my.cnf mysql_node1_slave1:/etc/mysql/my.cnf
重启容器
docker restart mysql_node1_slave1
进入主节点容器,命令如下:
docker exec -it mysql_node1_slave1 bash
登录mysql,命令如下:
mysql -u root -pnode1slave1root
参考server_id是否配置正确,判断my.cnf是否生效
SHOW VARIABLES LIKE 'server_id';
安装smeisync_slave模块,命令如下:
install plugin rpl_semi_sync_slave soname 'semisync\_slave.so';
set global rpl_semi_sync_slave_enabled = on;
查看效果,命令如下:
show global variables like 'rpl\_semi%';
输出结果:
mysql> show global variables like 'rpl_semi%';
+---------------------------------+-------+
| Variable_name | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled | ON |
| rpl_semi_sync_slave_trace_level | 32 |
+---------------------------------+-------+
2 rows in set (0.01 sec)
rpl_semi_sync_slave_enabled为ON表示设置成功。
授权,命令如下:
ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'node1slave1root';
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'node1slave1root';
FLUSH PRIVILEGES;
重启从节点1的mysql服务,命令如下:
docker restart mysql_node1_slave1
部署node2节点的slave2
docker-compose.yaml文件
编辑docker-compose.yaml文件,代码如下:
mkdir /var/lib/mysqlslave
ls -ld /var/lib/mysqlslave/
chmod 755 /var/lib/mysqlslave/
ls -ld /var/lib/mysqlslave/
mkdir /opt/software/mysqlcluster/slave2
cd /opt/software/mysqlcluster/slave2
vi docker-compose.yaml
文件内容,代码如下:
version: '3' # 使用docker-compose版本3
services: # 定义服务
mysql_master: # 定义一个名为mysql\_master的服务
image: mysql:8.0.20 # 使用MySQL 8.0.20镜像
container_name: mysql_node2_slave2 # 指定容器名称为mysql\_node3\_slave2
restart: unless-stopped # 在容器退出时自动重新启动
ports: # 定义容器和主机之间的端口映射
- "33065:3310" # 将容器的3306端口映射到主机的33061端口
environment: # 定义环境变量
MYSQL_ROOT_PASSWORD: node2slave2root # 设置root用户的密码
volumes: # 定义数据卷
- /var/lib/mysqlslave:/var/lib/mysql # 数据目录
healthcheck:
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost", "-u", "root", "-pnode2slave2root"] # 设置容器健康检查命令
interval: 20s # 每隔20秒进行一次健康检查
timeout: 10s # 健康检查超时时间为10秒
retries: 3 # 健康检查失败时重试次数为3次
授权文件
sudo chmod 777 docker-compose.yaml
mkdir /opt/software/mysqlcluster/slave2/conf
vi /opt/software/mysqlcluster/slave2/conf/my.cnf
my.cnf文件
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
secure-file-priv= NULL
symbolic-links=0
default-storage-engine = InnoDB # 默认存储引擎
server_id = 1021 # 服务器的唯一标识符
bind-address = 0.0.0.0 # 服务器监听的IP地址
port = 3310 # 服务器监听的端口号
character-set-server = utf8mb4 # 服务器使用的字符集
skip-external-locking # 不使用外部锁定
skip-name-resolve # 不进行域名解析
relay_log = relay-log # 开启中继日志
relay_log_index = slave-relay-bin.index # 设置中继日志索引的文件名
read_only = ON # 启用只读属性
relay_log_purge = 0 # 是否自动清空不再需要中继日志
log_slave_updates=1 # 开启从服务器记录二进制日志更新的功能
max_connections = 2000 # 最大连接数
max_user_connections = 1000 # 单个用户最大连接数
max_connect_errors = 4000 # 最大连接错误数
wait_timeout = 300 # 空闲连接的超时时间
interactive_timeout = 600 # 交互式连接的超时时间
table_open_cache = 512 # 表缓存大小
max_allowed_packet = 32M # 最大允许的数据包大小
sort_buffer_size = 2M # 排序缓冲区大小
join_buffer_size = 2M # 连接缓冲区大小
thread_cache_size = 8 # 线程缓存大小
sync_binlog = 0 # 数据刷盘参数=0时,由文件系统控制写盘的频率,并发性能最好,但是意外丢失数据的风险最大
gtid_mode = ON # 开启GTID模式,用于自动处理复制中的事务
enforce_gtid_consistency = ON # GTID\_MODE 和 ENFORCE\_GTID\_CONSISTENCY 的设置是一致的,强制全局事务标识的一致性
# 日志设置
log-short-format = 1 # 使用短格式记录日志
slow_query_log # 启用慢查询日志
long_query_time = 2 # 慢查询的时间阈值
# 二进制日志设置
binlog_format = MIXED # 二进制日志格式
binlog_expire_logs_seconds = 864000 # 二进制日志过期时间(单位:秒)
# InnoDB特定选项
innodb_buffer_pool_size = 4G # InnoDB缓冲池大小
innodb_thread_concurrency = 8 # InnoDB线程并发数
innodb_flush_method = O\_DIRECT # InnoDB刷新日志的方法
innodb_flush_log_at_trx_commit = 1 # 控制事务日志的同步方式
innodb_log_buffer_size = 128M # InnoDB日志缓冲区大小
innodb_log_file_size = 256M # InnoDB日志文件大小
innodb_log_files_in_group = 3 # InnoDB日志文件组中的文件数
innodb_max_dirty_pages_pct = 90 # InnoDB脏页的最大比例
innodb_lock_wait_timeout = 50 # InnoDB锁等待超时时间(单位:秒)
innodb_file_per_table = 1 # 每个表使用独立的表空间文件
plugin-load = semisync_slave.so # 半同步复制
rpl_semi_sync_slave_enabled = 1 # 开启半同步复制
[mysqldump]
quick # 快速导出数据
max_allowed_packet = 16M # 最大允许的数据包大小
[myisamchk]
key_buffer_size = 256M # MyISAM键缓冲区大小
sort_buffer_size = 256M # MyISAM排序缓冲区大小
read_buffer = 2M # MyISAM读缓冲区大小
write_buffer = 2M # MyISAM写缓冲区大小
[mysqlhotcopy]
interactive-timeout = 3600 # 交互式超时时间,超时时间设置为 1 小时
授权启动
sudo chmod 644 /opt/software/mysqlcluster/slave2/conf/my.cnf
启动运行,命令如下:
docker-compose up -d
docker-compose ps
复制配置文件my.cnf到容器中
docker cp /opt/software/mysqlcluster/slave2/conf/my.cnf mysql_node2_slave2:/etc/mysql/my.cnf
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Linux运维工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Linux运维全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Linux运维知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加VX:vip1024b (备注Linux运维获取)
为了做好运维面试路上的助攻手,特整理了上百道 【运维技术栈面试题集锦】 ,让你面试不慌心不跳,高薪offer怀里抱!
这次整理的面试题,小到shell、MySQL,大到K8s等云原生技术栈,不仅适合运维新人入行面试需要,还适用于想提升进阶跳槽加薪的运维朋友。
本份面试集锦涵盖了
- 174 道运维工程师面试题
- 128道k8s面试题
- 108道shell脚本面试题
- 200道Linux面试题
- 51道docker面试题
- 35道Jenkis面试题
- 78道MongoDB面试题
- 17道ansible面试题
- 60道dubbo面试题
- 53道kafka面试
- 18道mysql面试题
- 40道nginx面试题
- 77道redis面试题
- 28道zookeeper
总计 1000+ 道面试题, 内容 又全含金量又高
- 174道运维工程师面试题
1、什么是运维?
2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?
3、现在给你三百台服务器,你怎么对他们进行管理?
4、简述raid0 raid1raid5二种工作模式的工作原理及特点
5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?
6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?
7、Tomcat和Resin有什么区别,工作中你怎么选择?
8、什么是中间件?什么是jdk?
9、讲述一下Tomcat8005、8009、8080三个端口的含义?
10、什么叫CDN?
11、什么叫网站灰度发布?
12、简述DNS进行域名解析的过程?
13、RabbitMQ是什么东西?
14、讲一下Keepalived的工作原理?
15、讲述一下LVS三种模式的工作过程?
16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?
17、如何重置mysql root密码?
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
889949)]
[外链图片转存中…(img-X6fCjnBY-1712780889950)]
[外链图片转存中…(img-crhXtTq5-1712780889950)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Linux运维知识点,真正体系化!
由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新
如果你觉得这些内容对你有帮助,可以添加VX:vip1024b (备注Linux运维获取)
[外链图片转存中…(img-3B8DOdGS-1712780889950)]
为了做好运维面试路上的助攻手,特整理了上百道 【运维技术栈面试题集锦】 ,让你面试不慌心不跳,高薪offer怀里抱!
这次整理的面试题,小到shell、MySQL,大到K8s等云原生技术栈,不仅适合运维新人入行面试需要,还适用于想提升进阶跳槽加薪的运维朋友。
[外链图片转存中…(img-6njHzQsm-1712780889951)]
本份面试集锦涵盖了
- 174 道运维工程师面试题
- 128道k8s面试题
- 108道shell脚本面试题
- 200道Linux面试题
- 51道docker面试题
- 35道Jenkis面试题
- 78道MongoDB面试题
- 17道ansible面试题
- 60道dubbo面试题
- 53道kafka面试
- 18道mysql面试题
- 40道nginx面试题
- 77道redis面试题
- 28道zookeeper
总计 1000+ 道面试题, 内容 又全含金量又高
- 174道运维工程师面试题
1、什么是运维?
2、在工作中,运维人员经常需要跟运营人员打交道,请问运营人员是做什么工作的?
3、现在给你三百台服务器,你怎么对他们进行管理?
4、简述raid0 raid1raid5二种工作模式的工作原理及特点
5、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?
6、Squid、Varinsh和Nginx有什么区别,工作中你怎么选择?
7、Tomcat和Resin有什么区别,工作中你怎么选择?
8、什么是中间件?什么是jdk?
9、讲述一下Tomcat8005、8009、8080三个端口的含义?
10、什么叫CDN?
11、什么叫网站灰度发布?
12、简述DNS进行域名解析的过程?
13、RabbitMQ是什么东西?
14、讲一下Keepalived的工作原理?
15、讲述一下LVS三种模式的工作过程?
16、mysql的innodb如何定位锁问题,mysql如何减少主从复制延迟?
17、如何重置mysql root密码?
一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-1PdjkYsq-1712780889951)]