梦想还是要有的,万一忘了咋办?

0%

MySql8安装

目录

  • 安装主节点
  • 安装从节点
  • 数据迁移
  • ai问答

主节点

初始化

bash #ubuntu默认不是bash作为默认shell,不支持{xx,xx,xxx}的语法,需要切换后执行

1
2
3
4
5
6
7
8
9
10
mkdir -p /data/docker-compose/mysql8/{config,initdb,data}

if [ -f /etc/os-release ]; then
. /etc/os-release
if [ "$NAME" == "Ubuntu" ] && [ "$VERSION_ID" == "20.04" ]; then
chown -R systemd-coredump:systemd-coredump /data/docker-compose/mysql8
elif [ "$NAME" == "CentOS Linux" ] && [ "$VERSION_ID" == "7" ]; then
chown -R polkitd:input /data/docker-compose/mysql8
fi
fi

配置文件

my.cnf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
cat > /data/docker-compose/mysql8/config/my.cnf << \EOF
[client]
# MySQL服务器的Socket路径
socket=/var/lib/mysql/mysql.sock

[mysql]
# MySQL服务器的Socket路径
socket=/var/lib/mysql/mysql.sock
# 默认字符集
default-character-set=utf8mb4

[mysqld]
############
# 个性化配置 #
############

# mysql监听端口
port=3306
# mysqlx监听端口
mysqlx_port=33060
# server-id需要根据主从来改变其值,保证唯一性
server-id=1

# 优化器依赖直方图内存使用量
histogram_generation_max_mem_size=512M
# 缓冲池区块大小
innodb_buffer_pool_chunk_size=1G
# 缓冲池大小
innodb_buffer_pool_size=8G
# 缓冲池实例数
innodb_buffer_pool_instances=8

# 最大允许的数据包大小
max_allowed_packet=256M
# 临时表大小
tmp_table_size=1024M
# 最大堆表大小
max_heap_table_size=512M
# InnoDB并行读线程数
innodb_parallel_read_threads=8

# InnoDB读线程数
innodb_read_io_threads=8
# InnoDB写线程数
innodb_write_io_threads=8

# InnoDB自适应哈希索引部分数目
innodb_adaptive_hash_index_parts=16

# 事务隔离级别
transaction_isolation=REPEATABLE-READ

# SQL模式
# 去掉了默认的ONLY_FULL_GROUP_BY
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
# 不区分大小写
lower_case_table_names=1

# 使用mysql_native_password进行认证
default-authentication-plugin=caching_sha2_password

############
# 通用性配置 #
############

# MySQL服务器的Socket路径
socket=/var/lib/mysql/mysql.sock
# 临时文件目录
tmpdir=/tmp
# 数据库文件目录
datadir=/var/lib/mysql
# 错误日志文件路径
log_error=/var/lib/mysql/error.log
# 慢查询日志文件路径
slow_query_log_file=/var/lib/mysql/slow.log
# PID文件路径
pid-file=/var/lib/mysql/mysqld.pid

# 字符集和时区配置
# 服务器字符集
character-set-server=utf8mb4
# 服务器排序规则
collation-server=utf8mb4_0900_ai_ci
# 初始连接时设置的字符集
init_connect='SET NAMES utf8mb4'
# 默认时区
default_time_zone='+8:00'

# 客户端连接超时时间
interactive_timeout=28800
# 程序连接超时时间
wait_timeout=28800

# binlog相关配置
# binlog文件名前缀
log_bin=mysql-bin
# 同步BINLOG
sync_binlog=1
# BINLOG格式
binlog_format=ROW
# 启用GTID
enforce_gtid_consistency=true
gtid-mode=ON
# 复制日志也记录到binlog
log_replica_updates=ON
log-slave-updates=ON
# 跳过错误的SQL语句
slave-skip-errors=1062

# 功能性参数

# 自增相关配置
auto_increment_increment=1
auto_increment_offset=1

# 自动提交配置
autocommit=1

# 禁用存储引擎配置
# disabled_storage_engines=MyISAM

# 每周第一天是周一
default_week_format=1
# 密码过期不断开当前连接
disconnect_on_expired_password=0
# 必须显式的配置时间字段
explicit_defaults_for_timestamp=1
# GROUP_CONCAT()返回的最大值,默认1024
group_concat_max_len=1024
# 跳过域名解析
skip_name_resolve=ON
# 死锁释放时间,结束并回滚第二个事务,默认50s
innodb_lock_wait_timeout=50

# error日志打印锁表信息,测试环境开启有助及时定位问题,但可能因为大量死锁占用磁盘空间
innodb_print_all_deadlocks=OFF

# 严格模式配置(不允许插入非法值)
innodb_strict_mode=ON

# 存储过程递归调用深度配置(禁止递归调用)
max_sp_recursion_depth=0

# 主从信息存储方式配置(存储在表中)
master_info_repository=TABLE
relay_log_info_repository=TABLE

# 文件导出目录限制配置(不限制)
secure_file_priv=''

# 性能参数配置(根据服务器硬件资源调整)

# 指定MySQL服务器是一个专用服务器
# innodb_dedicated_server=ON

# InnoDB更改缓冲区的最大大小
innodb_change_buffer_max_size=25

# 排序缓冲区大小
innodb_sort_buffer_size=4M
# 连接缓冲区大小
join_buffer_size=4M
# 读缓冲区大小
read_buffer_size=4M
# 随机读缓冲区大小
read_rnd_buffer_size=4M
# 排序缓冲区大小
sort_buffer_size=4M
# 排序数据的最大长度
max_length_for_sort_data=4M
# 最大排序长度
max_sort_length=4M
# 预读缓冲区大小
preload_buffer_size=4M

# 每张表独立一个磁盘文件
innodb_file_per_table=ON
# 强制使用O_DIRECT模式,避免了在内核缓存中多次复制数据,直接交给磁盘处理
innodb_flush_method=O_DIRECT
# 不紧密地组织磁盘IO
innodb_flush_neighbors=0

# InnoDB磁盘IO能力
innodb_io_capacity=200
# InnoDB磁盘IO最大能力
innodb_io_capacity_max=2000
# 每次事务都会写两次日志,这是为了保证日志的可靠性,避免在写日志的时候宕机
innodb_flush_log_at_trx_commit=1
# 启用InnoDB的双写机制
innodb_doublewrite=ON
# 启用InnoDB的自适应刷新机制
innodb_adaptive_flushing=ON

# 最大打开的文件数
innodb_open_files=4000
# 表定义缓存,可以提高表的打开速度
table_definition_cache=2000
# 缓存表的数量,可以提高查询速度
table_open_cache=4000
# 表缓存实例数
table_open_cache_instances=16
# 表空间定义缓存
tablespace_definition_cache=256

# 最大连接数
max_connections=1000
# 最大错误连接数
max_connect_errors=500000
# 连接请求队列的长度
back_log=1024

# 线程相关
# InnoDB线程并发控制,0表示自动计算
innodb_thread_concurrency=0
#线程缓存大小
thread_cache_size=128
# 线程栈大小
thread_stack=512K

# 默认为16M
innodb_log_buffer_size=512M
# 配置可以定制redo日志大小和个数,但有redo日志不全的风险,默认48M,实际为倍数
# innodb_log_file_size=1G
# 在线ddl的redo日志,默认128M
# innodb_online_alter_log_max_size=1G
# 默认为2个,
# innodb_log_files_in_group=8

# 超时后是否自动回滚
# innodb_rollback_on_timeout=OFF

# 最好不要出现允许为NULL的字段,如果出现可以考虑设置innodb_stats_method忽略NULL值的出现次数
# innodb_stats_method=nulls_ignored

EOF

initdb

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
cat > /data/docker-compose/mysql8/initdb/initdb.sql << \EOF
set sql_log_bin=0;
use mysql;
-- alter user'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'Zszc_0501';
alter user'root'@'%' IDENTIFIED WITH caching_sha2_password BY 'Zszc_0501';
create user 'repl'@'%' identified WITH caching_sha2_password BY 'Repl_0501';
grant replication client,replication slave on *.* to 'repl'@'%';
create user 'bkuser'@'%' identified WITH caching_sha2_password BY 'Bkuser_0501';
grant reload,process,lock tables,replication client on *.* to 'bkuser'@'%';
create user 'exporter'@'%' identified WITH caching_sha2_password BY 'Exporter_0501';
grant process,replication client on *.* to 'exporter'@'%';
grant select on performance_schema.* to 'exporter'@'%';
flush privileges;
set sql_log_bin=1;
EOF

docker-compose

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
cat > /data/docker-compose/mysql8/docker-compose.yaml << \EOF
version: "3"
services:
mysql:
image: mysql:8.0.33
container_name: mysql8
environment:
- MYSQL_ALLOW_EMPTY_PASSWORD=1
volumes:
- /etc/localtime:/etc/localtime
- /tmp:/tmp
- /data/docker-compose/mysql8/data:/var/lib/mysql
- /data/docker-compose/mysql8/config/my.cnf:/etc/my.cnf
- /data/docker-compose/mysql8/initdb:/docker-entrypoint-initdb.d
expose:
- 3306
- 33060
restart: unless-stopped
network_mode: "host"
mysql-exporter:
image: prom/mysqld-exporter:v0.14.0
container_name: mysql8-exporter
environment:
- DATA_SOURCE_NAME=exporter:Exporter_0501@(127.0.0.1:3306)/
expose:
- 9104
restart: unless-stopped
network_mode: "host"
EOF

# 启动主库
cd /data/docker-compose/mysql8
# docker compose up -d

# 清理密码初始化文件
# rm -f /data/docker-compose/mysql8/initdb/initdb.sql

从节点

初始化

bash #ubuntu默认不是bash作为默认shell,不支持{xx,xx,xxx}的语法,需要切换后执行

1
2
3
4
5
6
7
8
9
10
mkdir -p /data/docker-compose/mysql8-slave/{config,initdb,data}

if [ -f /etc/os-release ]; then
. /etc/os-release
if [ "$NAME" == "Ubuntu" ] && [ "$VERSION_ID" == "20.04" ]; then
chown -R systemd-coredump:systemd-coredump /data/docker-compose/mysql8
elif [ "$NAME" == "CentOS Linux" ] && [ "$VERSION_ID" == "7" ]; then
chown -R polkitd:input /data/docker-compose/mysql8
fi
fi

配置文件

my.cnf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
cat > /data/docker-compose/mysql8-slave/config/my.cnf << \EOF
[client]
# MySQL服务器的Socket路径
socket=/var/lib/mysql/mysql.sock

[mysql]
# MySQL服务器的Socket路径
socket=/var/lib/mysql/mysql.sock
# 默认字符集
default-character-set=utf8mb4

[mysqld]
############
# 个性化配置 #
############

# mysql监听端口
port=3307
# mysqlx监听端口
mysqlx_port=33070
# server-id需要根据主从来改变其值,保证唯一性
server-id=2

# 优化器依赖直方图内存使用量
histogram_generation_max_mem_size=512M
# 缓冲池区块大小
innodb_buffer_pool_chunk_size=1G
# 缓冲池大小
innodb_buffer_pool_size=8G
# 缓冲池实例数
innodb_buffer_pool_instances=8

# 最大允许的数据包大小
max_allowed_packet=256M
# 临时表大小
tmp_table_size=1024M
# 最大堆表大小
max_heap_table_size=512M
# InnoDB并行读线程数
innodb_parallel_read_threads=8

# InnoDB读线程数
innodb_read_io_threads=8
# InnoDB写线程数
innodb_write_io_threads=8

# InnoDB自适应哈希索引部分数目
innodb_adaptive_hash_index_parts=16

# 事务隔离级别
transaction_isolation=REPEATABLE-READ

# SQL模式
# 去掉了默认的ONLY_FULL_GROUP_BY
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
# 不区分大小写
lower_case_table_names=1

# 使用mysql_native_password进行认证
default-authentication-plugin=caching_sha2_password

############
# 通用性配置 #
############

# MySQL服务器的Socket路径
socket=/var/lib/mysql/mysql.sock
# 临时文件目录
tmpdir=/tmp
# 数据库文件目录
datadir=/var/lib/mysql
# 错误日志文件路径
log_error=/var/lib/mysql/error.log
# 慢查询日志文件路径
slow_query_log_file=/var/lib/mysql/slow.log
# PID文件路径
pid-file=/var/lib/mysql/mysqld.pid

# 字符集和时区配置
# 服务器字符集
character-set-server=utf8mb4
# 服务器排序规则
collation-server=utf8mb4_0900_ai_ci
# 初始连接时设置的字符集
init_connect='SET NAMES utf8mb4'
# 默认时区
default_time_zone='+8:00'

# 客户端连接超时时间
interactive_timeout=28800
# 程序连接超时时间
wait_timeout=28800

# binlog相关配置
# binlog文件名前缀
log_bin=mysql-bin
# 同步BINLOG
sync_binlog=1
# BINLOG格式
binlog_format=ROW
# 启用GTID
enforce_gtid_consistency=true
gtid-mode=ON
# 复制日志也记录到binlog
log_replica_updates=ON
log-slave-updates=ON
# 跳过错误的SQL语句
slave-skip-errors=1062

# 功能性参数

# 自增相关配置
auto_increment_increment=1
auto_increment_offset=1

# 自动提交配置
autocommit=1

# 禁用存储引擎配置
# disabled_storage_engines=MyISAM

# 每周第一天是周一
default_week_format=1
# 密码过期不断开当前连接
disconnect_on_expired_password=0
# 必须显式的配置时间字段
explicit_defaults_for_timestamp=1
# GROUP_CONCAT()返回的最大值,默认1024
group_concat_max_len=1024
# 跳过域名解析
skip_name_resolve=ON
# 死锁释放时间,结束并回滚第二个事务,默认50s
innodb_lock_wait_timeout=50

# error日志打印锁表信息,测试环境开启有助及时定位问题,但可能因为大量死锁占用磁盘空间
innodb_print_all_deadlocks=OFF

# 严格模式配置(不允许插入非法值)
innodb_strict_mode=ON

# 存储过程递归调用深度配置(禁止递归调用)
max_sp_recursion_depth=0

# 主从信息存储方式配置(存储在表中)
master_info_repository=TABLE
relay_log_info_repository=TABLE

# 文件导出目录限制配置(不限制)
secure_file_priv=''

# 性能参数配置(根据服务器硬件资源调整)

# 指定MySQL服务器是一个专用服务器
# innodb_dedicated_server=ON

# InnoDB更改缓冲区的最大大小
innodb_change_buffer_max_size=25

# 排序缓冲区大小
innodb_sort_buffer_size=4M
# 连接缓冲区大小
join_buffer_size=4M
# 读缓冲区大小
read_buffer_size=4M
# 随机读缓冲区大小
read_rnd_buffer_size=4M
# 排序缓冲区大小
sort_buffer_size=4M
# 排序数据的最大长度
max_length_for_sort_data=4M
# 最大排序长度
max_sort_length=4M
# 预读缓冲区大小
preload_buffer_size=4M

# 每张表独立一个磁盘文件
innodb_file_per_table=ON
# 强制使用O_DIRECT模式,避免了在内核缓存中多次复制数据,直接交给磁盘处理
innodb_flush_method=O_DIRECT
# 不紧密地组织磁盘IO
innodb_flush_neighbors=0

# InnoDB磁盘IO能力
innodb_io_capacity=200
# InnoDB磁盘IO最大能力
innodb_io_capacity_max=2000
# 每次事务都会写两次日志,这是为了保证日志的可靠性,避免在写日志的时候宕机
innodb_flush_log_at_trx_commit=1
# 启用InnoDB的双写机制
innodb_doublewrite=ON
# 启用InnoDB的自适应刷新机制
innodb_adaptive_flushing=ON

# 最大打开的文件数
innodb_open_files=4000
# 表定义缓存,可以提高表的打开速度
table_definition_cache=2000
# 缓存表的数量,可以提高查询速度
table_open_cache=4000
# 表缓存实例数
table_open_cache_instances=16
# 表空间定义缓存
tablespace_definition_cache=256

# 最大连接数
max_connections=1000
# 最大错误连接数
max_connect_errors=500000
# 连接请求队列的长度
back_log=1024

# 线程相关
# InnoDB线程并发控制,0表示自动计算
innodb_thread_concurrency=0
#线程缓存大小
thread_cache_size=128
# 线程栈大小
thread_stack=512K

# 默认为16M
innodb_log_buffer_size=512M
# 配置可以定制redo日志大小和个数,但有redo日志不全的风险,默认48M,实际为倍数
# innodb_log_file_size=1G
# 在线ddl的redo日志,默认128M
# innodb_online_alter_log_max_size=1G
# 默认为2个,
# innodb_log_files_in_group=8

# 超时后是否自动回滚
# innodb_rollback_on_timeout=OFF

# 最好不要出现允许为NULL的字段,如果出现可以考虑设置innodb_stats_method忽略NULL值的出现次数
# innodb_stats_method=nulls_ignored

EOF

initdb

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
cat > /data/docker-compose/mysql8-slave/initdb/initdb.sql << \EOF
set sql_log_bin=0;
use mysql;
-- alter user'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'Zszc_0501';
alter user'root'@'%' IDENTIFIED WITH caching_sha2_password BY 'Zszc_0501';
create user 'repl'@'%' identified WITH caching_sha2_password BY 'Repl_0501';
grant replication client,replication slave on *.* to 'repl'@'%';
create user 'bkuser'@'%' identified WITH caching_sha2_password BY 'Bkuser_0501';
grant reload,process,lock tables,replication client on *.* to 'bkuser'@'%';
create user 'exporter'@'%' identified WITH caching_sha2_password BY 'Exporter_0501';
grant process,replication client on *.* to 'exporter'@'%';
grant select on performance_schema.* to 'exporter'@'%';
flush privileges;
set sql_log_bin=1;

change master to
master_host='repl_host',
master_port=repl_port,
master_user='repl',
master_password='Repl_0501',
master_auto_position=1,
master_ssl=1;
START SLAVE;

EOF

docker-compose

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
cat > /data/docker-compose/mysql8-slave/docker-compose.yaml << \EOF
version: "3"
services:
mysql:
image: mysql:8.0.33
container_name: mysql8-slave
environment:
- MYSQL_ALLOW_EMPTY_PASSWORD=1
volumes:
- /etc/localtime:/etc/localtime
- /tmp:/tmp
- /data/docker-compose/mysql8-slave/data:/var/lib/mysql
- /data/docker-compose/mysql8-slave/config/my.cnf:/etc/my.cnf
- /data/docker-compose/mysql8-slave/initdb:/docker-entrypoint-initdb.d
expose:
- 3307
- 33070
restart: unless-stopped
network_mode: "host"
mysql-exporter:
image: prom/mysqld-exporter:v0.14.0
container_name: mysql8-exporter-slave
command:
- --web.listen-address=:9204
environment:
- DATA_SOURCE_NAME=exporter:Exporter_0501@(127.0.0.1:3307)/
expose:
- 9204
restart: unless-stopped
network_mode: "host"
EOF

sed -i "/repl_host/s@repl_host@127.0.0.1@g" /data/docker-compose/mysql8-slave/initdb/initdb.sql
sed -i "/repl_port/s@repl_port@3306@g" /data/docker-compose/mysql8-slave/initdb/initdb.sql
# 启动主库
cd /data/docker-compose/mysql8-slave
# docker compose up -d

# 清理密码初始化文件
# rm -f /data/docker-compose/mysql8-slave/initdb/initdb.sql

数据迁移

mysqlx

1
2
3
mysqlsh --uri=root@192.168.4.230:33060

util.dumpInstance("ry-cloud-0531", { format: "sql" });

mysqldump

导出

1
mysqldump --single-transaction --default-character-set=utf8mb4 -uroot -pDQkD@v=0 ry-cloud-0531 | gzip > ry-cloud-0531_backup_$(date +%Y%m%d_%H%M%S).sql.gz

导入

1
2
3
4
5
gzip -d ry-cloud-0531_backup_20230606_094013.sql.gz

mysql -e "create database \`ry-cloud-0531\`;"
mysql -e "show databases"
mysql ry-cloud-0531 < /tmp/ry-cloud-0531_backup_20230606_094013.sql

ai问答

你提到的/var/lib/mysql/#innodb_redo目录下的文件大小和数量与你的innodb_log%配置不符,原因可能是这些文件是在MySQL异常情况下产生的临时redo日志文件。它们可能是在MySQL执行某些操作时,例如崩溃恢复或者在线DDL操作时产生的。

正常情况下,InnoDB redo日志文件的数量由innodb_log_files_in_group参数控制,大小由innodb_log_file_size参数控制。但是,在特殊情况下,MySQL可能会产生额外的临时redo日志文件,文件名以#ib_redo开头,后面跟一个序号。

这种情况下,你可以采取以下步骤进行处理:

  1. 停止MySQL服务:确保所有事务都已完成,然后安全地停止MySQL服务。

    1
    2
    3
    4
       sudo systemctl stop mysql
    ```

    2. 备份临时redo日志文件:在删除任何文件之前,建议先备份这些文件。可以将这些临时文件移动到一个单独的目录中。

    mkdir /var/lib/mysql/innodb_redo_backup
    mv /var/lib/mysql/#innodb_redo* /var/lib/mysql/innodb_redo_backup/

    1
    2
    3
    4

    3. 启动MySQL服务:删除或移动临时redo日志文件后,重新启动MySQL服务。

    `

    sudo systemctl start mysql

    1
    2
    3
    4
    5
    6

    4. 检查MySQL日志:启动MySQL后,检查`/var/log/mysql/error.log`,确保没有任何错误信息。

    5. 如果一切正常,可以删除备份的临时redo日志文件。

    `

    rm -rf /var/lib/mysql/innodb_redo_backup

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32

    注意:请在执行这些操作之前确保你有足够的数据备份。如果你不确定如何处理这些文件,请联系你的系统管理员或数据库管理员寻求帮助。



    InnoDB 存储引擎会根据 `innodb_log_file_size` 的设定值来自动创建 redo 日志文件,每个 redo 日志文件的大小通常是 `innodb_log_file_size` 的倍数,但并不一定是精确的倍数。当 InnoDB 存储引擎自动创建新的 redo 日志文件时,它会尝试将新文件的大小设置为下一个 2 的幂次方,并且不小于 `innodb_log_file_size` 的设定值。这个幂次方的值通常是 1、2、4、8 等,因此每个 redo 日志文件的大小通常是 `innodb_log_file_size` 的 1-8 倍之间。

    在您的情况下,每个 redo 日志文件的大小都是 `innodb_log_file_size` 的 6 倍,这可能是因为 InnoDB 存储引擎在自动创建 redo 日志文件时,选择了比较接近但不是精确的 6 倍 `innodb_log_file_size` 的大小。这个行为是 InnoDB 存储引擎的默认行为,无法通过参数进行配置或修改。

    需要注意的是,如果您修改了 `innodb_log_file_size` 参数的值,InnoDB 存储引擎会自动创建新的 redo 日志文件,并且会根据新的参数值来计算每个文件的大小。但是,修改 `innodb_log_file_size` 参数的值可能会对系统性能和可靠性产生影响,因此需要谨慎操作。



    如果您没有配置 `innodb_log_file_size` 参数,InnoDB 存储引擎会使用默认值 `48MB`,并且会记录所有的 redo 日志,并不会覆盖已有的日志。当当前的 redo 日志文件已满时,InnoDB 存储引擎会自动创建新的 redo 日志文件,并将新的日志记录在新的文件中。

    这种默认行为可以确保所有的 redo 日志都得到记录,并且不会被覆盖或删除,从而保证数据的可靠性和完整性。但是,这也会导致 redo 日志文件占用大量的磁盘空间,可能会影响系统的性能和可用性。因此,在实际应用中,建议根据实际需求和系统配置,适当调整 `innodb_log_file_size` 参数的值,并定期备份 redo 日志文件,以保证数据的安全和可靠性。

    需要注意的是,在没有进行备份的情况下,如果系统出现故障或异常情况,可能会导致 redo 日志文件损坏或丢失,进而导致数据无法恢复或修复。因此,定期备份 redo 日志文件并进行存储和管理,是确保数据安全和可靠性的重要措施之一。

    `innodb_log_file_size=512M` 和 `innodb_log_files_in_group=2` 的配置是合理的,它们设置了每个 redo 日志文件的最大大小为 512MB,每组日志文件只有两个。这个配置下,每组 redo 日志文件的总大小为 1GB。这个配置可以在一定程度上提高 InnoDB 存储引擎的性能和可靠性,但是需要注意的是,修改 redo 日志文件的大小和数量可能会对系统性能和可靠性产生影响,应该谨慎操作。

    `innodb_online_alter_log_max_size=1G` 是用于控制在线 DDL 操作(例如 ALTER TABLE)的日志大小的参数。在线 DDL 操作会生成大量的回滚段和 redo 日志,因此需要控制日志文件的大小,以防止占用过多的磁盘空间和影响系统性能。这个参数的默认值是 128MB,如果您需要支持大型的在线 DDL 操作,可以适当增大它的值。

    除了上述参数,还有一些其他的 InnoDB 相关的参数也可以影响系统性能和可靠性。例如,`innodb_buffer_pool_size` 参数用于控制 InnoDB 的缓冲池大小,可以影响数据的读写性能;`innodb_flush_log_at_trx_commit` 参数用于控制事务提交时的日志写入策略,可以影响事务的持久性和性能;`innodb_io_capacity` 和 `innodb_io_capacity_max` 参数用于控制磁盘 IO 的并发度和吞吐量,可以影响系统的 IO 性能;`innodb_thread_concurrency` 参数用于控制 InnoDB 存储引擎的并发度,可以影响系统的并发性能等等。这些参数的配置需要根据实际的系统配置和负载情况进行调整。

    MySQL提供了多种工具和方法来迁移数据库,其中 mysqldump 和 MySQL Shell (包括 MySQLx)是两种常用的工具。下面是用 mysqldump 和 MySQL Shell 迁移 MySQL 数据库的最佳实践:

    使用 mysqldump 迁移 MySQL 数据库的步骤如下:

    1. 在源数据库上运行以下命令导出数据库:

    `

    $ mysqldump -u -p ry-cloud-0531 > ry-cloud-0531-backup.sql

    1
    2
    3
    4
    5
    6
    7
    8

    这将在当前目录下创建名为 ry-cloud-0531-backup.sql 的备份文件。

    2. 将备份文件传输到目标服务器上。

    3. 在目标数据库上运行以下命令将备份文件导入到目标数据库中:

    `

    $ mysql -u -p ry-cloud-0531 < ry-cloud-0531-backup.sql

    1
    2
    3
    4
    5
    6
    7
    8

    这将在目标数据库中创建名为 ry-cloud-0531 的数据库,并将备份文件中的数据导入到该数据库中。

    使用 MySQL Shell (包括 MySQLx) 迁移 MySQL 数据库的步骤如下:

    1. 在源服务器上运行以下命令连接到 MySQL Shell:

    `

    $ mysqlsh –uri=@:

    1
    2
    3
    4
    5
    6

    这将打开 MySQL Shell。

    2. 运行以下命令将数据库导出:

    `

    MySQL> util.dumpInstance(“ry-cloud-0531”, { format: “sql” });

    1
    2
    3
    4
    5
    6
    7
    8

    这将在当前目录下创建名为 ry-cloud-0531.sql 的备份文件。

    3. 将备份文件传输到目标服务器上。

    4. 在目标服务器上运行以下命令连接到 MySQL Shell:

    `

    $ mysqlsh –uri=@:

    1
    2
    3
    4

    5. 运行以下命令将备份文件导入到目标数据库中:

    `

    MySQL> util.loadDump(“ry-cloud-0531.sql”);

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22

    这将在目标数据库中创建名为 ry-cloud-0531 的数据库,并将备份文件中的数据导入到该数据库中。

    希望这些步骤可以帮助您成功迁移 MySQL 数据库。

    这个错误是因为您的 mysqlsh 命令行工具不支持 default-character-set 选项,而您的配置文件中可能有这个选项。您可以尝试以下几种方法来解决这个问题:

    - 在配置文件中删除或注释掉 default-character-set 选项,或者将其移动到 [mysql] 或 [mysqld] 节中。
    - 在配置文件中给 default-character-set 选项加上 loose_ 前缀,这样可以让 mysqlsh 忽略不支持的选项,但会显示一个警告。
    - 在运行 mysqlsh 命令时加上 --no-defaults 选项,这样可以让 mysqlsh 不读取配置文件中的选项。

    请参考¹²³⁴中的更多信息和示例。希望对您有所帮助。👍

    源: 与必应的对话, 2023/6/6
    (1) How to change the default character set of mysql using docker-compose .... https://stackoverflow.com/questions/45729326/how-to-change-the-default-character-set-of-mysql-using-docker-compose.
    (2) mysqlbinlog: unknown variable 'default-character-set=utf8mb4'. https://stackoverflow.com/questions/70233283/mysqlbinlog-unknown-variable-default-character-set-utf8mb4.
    (3) MySQL unknown variable 'default-character-set=utf8'的解决 - CSDN博客. https://blog.csdn.net/a77687789/article/details/101331618.
    (4) MySQL :: MySQL Shell 8.0 :: A.1 mysqlsh — The MySQL Shell. https://dev.mysql.com/doc/mysql-shell/8.0/en/mysqlsh.html.



    当你在生产环境中使用 mysqldump 命令时,确保命令不会影响数据库的性能和稳定性非常重要。以下是一个经过优化的 mysqldump 命令,可以帮助你在生产环境中安全地导出 `ry-cloud-0531` 数据库:

    mysqldump –single-transaction –routines –triggers –events –add-drop-table –skip-lock-tables –set-gtid-purged=OFF –hex-blob –result-file=<backup_file.sql> –user= –password= ry-cloud-0531

这个命令包含了以下参数:

  • --single-transaction:在导出数据时使用事务,以确保导出数据的一致性。
  • --routines:导出存储过程和函数。
  • --triggers:导出触发器。
  • --events:导出事件。
  • --add-drop-table:在导出数据之前,添加删除数据表的语句。
  • --skip-lock-tables:在导出数据时,跳过锁定数据表的步骤,避免对数据库性能的影响。
  • --set-gtid-purged=OFF:在导出数据时,禁用 GTID 信息,可以避免在还原数据时出现一些问题。
  • --hex-blob:在导出数据时,将二进制数据转换为十六进制格式。
  • --result-file=<backup_file.sql>:将导出的数据保存到指定的文件中。
  • --user=<username>:使用指定的用户名连接到 MySQL 服务器。
  • --password=<password>:指定连接到 MySQL 服务器所需的密码。
  • ry-cloud-0531:要导出的数据库的名称。

这个命令跳过了锁定数据表和添加锁定语句的步骤,从而避免了对数据库性能的影响。此外,禁用 GTID 信息可以避免在还原数据时出现一些问题。使用 --hex-blob 参数可以确保二进制数据正确导出。

请注意,这个命令不包含 --compress 参数,因为在导出期间启用压缩可能会占用大量 CPU 资源,从而影响数据库性能。

最后,为了保证备份数据的安全性,建议你将备份文件保存到安全的位置,并定期测试备份的可用性和完整性。

希望这些信息能够帮助你在生产环境中安全地导出 ry-cloud-0531 数据库。