零、前言
默认以5.7最新版本及8.0版本为模板编写,涉及5.7-的内容部分会提及
一、安装
传送门:MySQL :: MySQL Community Downloads https://dev.mysql.com/downloads/repo/apt/)
yum源 :https://dev.mysql.com/downloads/repo/yum/
例如:当前rpm文件为
mysql80-community-release-el8-3.noarch.rpm
rpm -ivh mysql80-community-release-el8-3.noarch.rpm
①获取当前可获取mysql版本
yum check-update mysql
②选择包,安装
#过滤mysql8.0包 yum list | grep mysql80 #安装mysql-server yum install mysql-community-server.x86_64
①启动并设置开机自启
systemctl start mysqld
systemctl enable mysqld
②基本命令
检验状态: mysql status
启/停应用
#停止运行mysql
mysql stop
#启动mysql
mysql start
apt源:https://dev.mysql.com/downloads/repo/apt/
例如:当前deb文件为
mysql-apt-config_0.8.22-1_all.deb
sudo dpkg -i mysql-apt-config_0.8.22-1_all.deb
①获取最新版本讯息
sudo apt update
②安装
sudo apt install mysql-server
①加固mysql
通常用于加强密码安全性,同时可以设置mysql的root密码
sudo mysql_secure_installation
②基本命令:
校验状态:systemctl status mysql
启/停应用:
#####启动应用#######
#1、service 启动
service mysql start
#2、safe_mysqld 启动,官方推荐的启动方式(通常用于调试阶段)
mysqld_safe
亦或:mysqld_safe --defaults-file=my.cnf > mysqld.log 2>&1 &
######关闭应用######
service mysql stop
③设置开机自启
sudo update-rc.d -f mysql defaults
二、偷懒备份脚本
下面英文都是为了装逼,简要来说就是分了三个部分
①备份所有数据结构和数据
②备份所有数据
③备份数据结构
#!/bin/bash
# mysql locate here
# just use the format like example that can be backup the db;
# ./backup.sh demo
# extra param is model :
#1、 default is meaning to backup all struct and data
# eg: ./backup.sh demo
#2、 data is meaning to keep the data only
# eg: ./backup.sh demo data
#3、struct is meaning to keep the struct only
# eg: ./backup.sh demo struct
excute_db=$1
excute_model=$2
mysql_home=/usr/local/mysql/bin/
base_home=/home/backup/
username=root
password=root
dbadress=localhost
# get current datetime
cur=$(date +%Y%m%d)
# some error maybe occur in working procedure and we can using --skip-lock-tables to fix it
# like: ${mysql_home}/mysqldump -h${dbadress} -u${username} -p${password} ${excute_db} --skip-lock-tables > ${base_home}/${cur}/${excute_db}_${cur}.sql
defaultKeep(){
echo "now is backup all struct and data : ${excute_db}"
${mysql_home}/mysqldump -h${dbadress} -u${username} -p${password} ${excute_db} > ${base_home}/${cur}/${excute_db}_${cur}.sql
}
customKeep(){
if [ "$1" = "data" ];then
echo "backup data only: ${excute_db}"
${mysql_home}/mysqldump -h${dbadress} -u${username} -p${password} -t ${excute_db} > ${base_home}/${cur}/${excute_db}_${cur}_dataOnly.sql
elif [ "$1" = "struct" ];then
echo "backup struct only: ${excute_db}"
${mysql_home}/mysqldump --opt -h${dbadress} -u${username} -p${password} -d ${excute_db} > ${base_home}/${cur}/${excute_db}_${cur}_structOnly.sql
else
defaultKeep
fi
}
folderCreatedByDate(){
echo -e "current would be created folder is ${cur}, the mysql_home is ${mysql_home}\n"
if [ ! -d "./${cur}" ]; then
mkdir "./${cur}"
else
echo "folder ./${cur} has been created"
fi
}
backupSelector(){
echo -e "\n ready to backup ${excute_db}"
folderCreatedByDate
if [ $2 ];then
customKeep $2
else
defaultKeep;
fi
}
if [ $1 ];then
backupSelector $1 $2
else
echo -e "\n you can just use the format like example that can be backup the db;
eg: ./backup.sh demo\n
extra param is model :
1、 default is meaning to backup all struct and data
eg: ./backup.sh demo \n
2、 data is meaning to keep the data only
eg: ./backup.sh demo data \n
3、struct is meaning to keep the struct only
eg: ./backup.sh demo struct \n"
fi
三、用户授权相关操作
Tips:整体上建议先有库再授权,否则不生效
1、创建用户
整体上创建用户需要注意的部分是是否需要
限制访问地址
。
# 创建用户,不限制访问ip地址
create user 'demo' @'%' identified by "demo_123"
#创建用户,限定ip,例:192.168.110.22
create user 'demo' @'192.168.110.22' identified by "demo_123"
2、授权给用户
1、通常可赋予的权限如下,但是若是猛点,可以直接all (建议先有库后授权)
①Alter: 修改已存在的数据表(例如增加/删除列)和索引。
②Create: 建立新的数据库或数据表。
③Delete: 删除表的记录。
④Drop: 删除数据表或数据库。
⑤INDEX: 建立或删除索引。
⑥Insert: 增加表的记录。
⑦Select: 显示/搜索表的记录。
⑧Update: 修改表中已存在的记录。2、grant 期间也可以限定ip赋予权限
#常用授权用于基于增/删/查/更新即可
grant select,insert,update,delete on *.* to "demo"@"%";
#其实不是很推荐,所有权限all put
grant all on *.* to "demo"@"%";
#刷新权限
flush privileges;
#查看权限,demo为用户名
show grants for demo;
3、关于编码相关
主要为兼容繁体等内容
my.cnf设置
# 客户端默认字符集合
default-character-set = utf8mb4
# 服务端使用的字符集默认为8比特编码
character-set-server=utf8mb4
基本上
default-character-set
约等于下面表内的都设置了
系统变量 | 描述 |
---|---|
character_set_client | (客户端来源数据使用的字符集) |
character_set_connection | (连接层字符集) |
character_set_database | (当前选中数据库的默认字符集) |
character_set_results | (查询结果字符集) |
character_set_server | (默认的内部操作字符集) |
万一没设置好字符集的补救方案
如果时间相关充裕,建议重建库构建
①修改数据库编码
ALTER DATABASE database_name CHARACTER SET = utf8mb4 COLLATE = utf8mb4_unicode_ci;
// COLLATE = utf8mb4_unicode_ci; 字符集可以不加
# 修改完可以使用如下命令检查修改結果:
show variables like 'character_set_database';
②修改数据表编码
alter table table_name character set utf8mb4 collate utf8mb4_unicode_ci
// COLLATE utf8mb4_unicode_ci; 字符集可以不加
#修改完可以使用如下命令检查修改数据表的結果:
show create table table_name;
③更新数据列编码
alter table <表名> change <字段名> <字段名> <类型> character set utf8mb4;
#检查方法
show full columns from <表名>
四、其他配置参数
参考讯息:
8.0版本:MySQL :: MySQL 8.0 Reference Manual :: 5.1.8 Server System Variables
5.7版本:MySQL :: MySQL 5.7 Reference Manual :: 5.1.7 Server System Variables
1、Client
针对客户端访问部分内容配置
属性名 | 参考默认值(5.7) | 参考默认值(8.0) | 备注 |
---|---|---|---|
port | 3306 | 3306 | 客户端连接服务器端时使用的端口号 |
socket | /tmp/mysql.sock | /tmp/mysql.sock | 客户端套接字文件所在目录 |
default-character-set | utf8 | utf8mb4 | 客户端字符集 |
no-auto-rehash | OFF | OFF | 禁用自动重新补全(就像linux里面tab补全一样的),会加快启动效率,默认是开启的 |
2、mysqlId
针对mysql应用
①通用配置
属性名 | 参考默认值(5.7) | 参考默认值(8.0) | 备注 |
---|---|---|---|
datadir | /var/lib/mysql | /var/lib/mysql | 数据库文件默认地址 |
basedir | 若非压缩包,可以忽略 | ||
port | 3306 | 3306 | 服务端占用的端口号 |
server-id | 设置主从时有用 | ||
socket | /var/run/mysql/mysql.sock | /var/run/mysqld/mysql.sock | 服务端套接字文件所在目录 |
skip-external-locking | 开启 | 开启 | 每个进程若要访问数据表,则必须等待之前的进程完成操作并解除锁定。(仅影响MyISAM,若关闭注释即可) |
character-set-serve | latin1 | utf8mb4 | 服务器默认字符集 |
default-storage-engine | InnoDB | InnoDB | 设置默认的引擎,不表明引擎创库表的默认引擎 |
thread_stack | 256KB | 8.0.27+:1024KB;8.026-:280KB, | 线程堆栈大小,默认64位,跟着自动配置即可 |
1、innodb配置
属性名 | 参考默认值(5.7) | 参考默认值(8.0) | 备注 |
---|---|---|---|
innodb_buffer_pool_size | 128MB | 128MB | 缓冲池大小,提高查询效率 |
innodb_data_home_dir | 通常与datadir 一致 | 通常与datadir 一致 | 记得尾部增加斜杠 |
innodb_data_file_path | ibdata1:12M:autoextend | ibdata1:12M:autoextend | 定义系统表空间数据文件的名称、大小和属性,格式file_name:file_size[:autoextend[:max:max_file_size]] |
innodb_thread_concurrency | 0 | 0 | 定义允许的最大线程数,0为无限制,通常根据并发数对业务影响,以10为单位慢慢调整即可。 |
innodb_flush_log_at_trx_commit | 1 | 1 | 默认设置为 1 是完全符合 ACID 所必需的。日志在每次事务提交时写入并刷新到磁盘。 如果设置为 0,则每秒将日志写入磁盘并刷新一次。尚未刷新其日志的事务可能会在崩溃中丢失。 如果设置为 2,则在每次事务提交后写入日志,并每秒刷新一次到磁盘。尚未刷新其日志的事务可能会在崩溃中丢失。 对于设置 0 和 2,不能 100% 保证每秒一次刷新。由于 DDL 更改和其他内部活动导致独立于innodb_flush_log_at_trx_commit 设置刷新日志,刷新可能会更频繁地发生,有时由于计划问题而降低刷新频率。如果每秒刷新一次日志,则崩溃时最多可能会丢失一秒钟的事务。如果刷新日志的频率高于或低于每秒一次的频率,则可能丢失的事务量会相应地变化。 |
innodb_log_buffer_size | 16MB | 16MB | 写入日志的缓冲区大小,根据事务可以酌情减少 |
innodb_log_file_size | 48MB | 48MB | 推荐值为256MB,理论上崩溃恢复1G约等于3分钟左右,这个值相对合适 |
innodb_log_files_in_group | 2 | 2 | 以环型方式(circular fashion)写入文件。根据推荐数值 3 较为合适 |
innodb_log_group_home_dir | 用于恢复数据的日志文件的路径,可以定义一个适合的位置 | ||
innodb_max_dirty_pages_pct | 75 | 90 | 控制脏页百分比 |
innodb_lock_wait_timeout | 50 | 50 | 事务等待获取资源等待的最长时间,单位(秒) |
2、主从配置
参考地址: MySQL :: MySQL 8.0 Reference Manual :: 13.4.2.1 CHANGE MASTER TO Statement
属性名 | 参考默认值(5.7) | 参考默认值(8.0) | 备注 |
---|---|---|---|
master-host | 主机ip | ||
master-user | 用于连接主机的用户名 | ||
master-password | 用于连接主机的用户名对应密码 | ||
master-port | 用于连接主机的端口号 | ||
replicate-do-db | 指定数据库名 | ||
master-connect-retry | 60 | 60 | 重连时间,单位:秒 |
slave-net-timeout | 60 | 60 | 重连等待连接时间,单位:秒 ,从8.0.26, replica-net-timeout |
log-slave-updates | OFF | OFF 从8.0.26, use log_replica_updates | 副本服务器从源服务器接收的更新是否应记录到副本自己的二进制日志中 |
relay-log | 中继日志路径,同步日志存放地方,eg:/var/mysql/slave/mysql-relay-bin | ||
relay-log-index | relaylog日志的索引文件,里面记录了所有当前有效的relaylog日志文件列表。eg:/var/mysql/slave/mysql-relay-bin.index | ||
slave_load_tmpdir | 从8.0.26,use log_replica_updates | 复制副本在其中创建临时文件的目录,若未设置,会读取tmpdir 参数 | |
slave_compressed_protocol | OFF | replica_compressed_protocol(8.0.26版本后使用这个参数名) | 使用源/副本连接协议的压缩,1为开启,默认不启用(建议开启) |
slave-skip-errors | OFF | 8.0.26开始,使用replica_skip_errors | 出现错误时忽略,以英文逗号分隔 all,所有错误ddl_exist_errors ,ddl的所有错误1007:数据库已存在,创建数据库失败 1008:数据库不存在,删除数据库失败 1050:数据表已存在,创建数据表失败 1051:数据表不存在,删除数据表失败 1054:字段不存在,或程序文件跟数据库有冲突 1060:字段重复,导致无法插入 1061:重复键名 1068:定义了多个主键 1094:位置线程ID 1146:数据表缺失,请恢复数据库 1053:复制过程中主服务器宕机 1062:主键冲突 Duplicate entry |
②日志方面配置
可以参详的地址:MySQL :: MySQL 5.7 Reference Manual :: 5.4 MySQL Server Logs
整体日志可分为六个类别
类型 类型描述 Error log 启动、运行或停止等错误日志 General query log 已建立的客户端连接和从客户端收到的查询语句 Binary log 更改数据的语句(也用于复制) Relay log 从复制源服务器接收到的数据更改 Slow query log 执行时间超过 long_query_time
秒的查询DDL log (metadata log) 由DDL语句执行的元数据操作
属性名 | 参考默认值(5.7) | 参考默认值(8.0) | 备注 | 动态 |
---|---|---|---|---|
log-short-format | OFF | OFF | 开启后基本上时间错和非必要讯息都会隐藏 | 是 |
skip-external-locking | 开启 | 开启 | 每个进程若要访问数据表,则必须等待之前的进程完成操作并解除锁定。(仅影响MyISAM,若影响关闭注释即可) | 否 |
log-error | /var/log/mysqld.log | /var/log/mysqld.log | 错误日志包含 mysqld 启动和关闭时间的记录。它还包含诊断消息,如在服务器启动和关闭期间以及服务器运行时发生的错误、警告和注释。例如,如果mysqld注意到需要自动检查或修复表,它会将消息写入错误日志。 | 是 |
general-log | 0 | 0 | 所有查询日志功能【建议调试时才开】 | 是 |
general_log_file | 1 | 1 | 日志存放地址,依赖于general-log ,当其为1时实际生效 | 是 |
log-bin | 通常需要配主从必备,若不配置则不启用,参数内容为存放路径 | 是 | ||
max_binlog_size | 1G | 1G | 单个日志文件最大容量· | 是 |
sync_binlog | 1 | 1 | sync_binlog=0 :禁用 MySQL 服务器将二进制日志同步到磁盘。相反,MySQL服务器依赖于操作系统不时将二进制日志刷新到磁盘,就像它对任何其他文件所做的那样。此设置提供最佳性能,但在发生电源故障或操作系统崩溃时,服务器可能已提交尚未同步到二进制日志的事务。 sync_binlog=1 :启用在提交事务之前将二进制日志同步到磁盘。这是最安全的设置,但由于磁盘写入次数增加,可能会对性能产生负面影响。如果发生电源故障或操作系统崩溃,二进制日志中缺少的事务仅处于就绪状态。这允许自动恢复例程回滚事务,从而保证二进制日志中不会丢失任何事务。 sync_binlog=* N* ,其中 *N * 是 0 或 1 以外的值:收集二进制日志提交组后,二进制日志将同步到磁盘。如果发生电源故障或操作系统崩溃,服务器可能已提交尚未刷新到二进制日志的事务。由于磁盘写入次数增加,此设置可能会对性能产生负面影响。值越高,性能越高,但数据丢失的风险也会增加。N | |
relay-log | 从复制源服务器接收到的数据更改日志路径 | 是 | ||
max_relay_log_size | 0 | 0 | 中继日志最大容量,也就是没有超过单个日志时的中继日志容量 | 是 |
slow_query_log | 0 | 0 | 是否启用慢查询日志,1为启用,0为禁用 | 是 |
slow_query_log_file | 慢查询日志存放路径 | 是 | ||
long_query_time | 10 | 10 | 超过多少秒会被定义为慢查询 | 是 |
③优化配置
属性名 | 参考默认值(5.7) | 参考默认值(8.0) | 备注 | myisam独有 |
---|---|---|---|---|
key_buffer_size | 8M | 8M | 只对MyISAM表起作用5.7版本之后默认临时存储INNODB引擎,可以忽略这个参数 (32位最大4g,默认8m,官方建议为总内存的25%) | 是 |
max_allowed_packet | 4M | 64M | 请求包的最大大小以及服务所能处理的最大的请求大小 | 否 |
table_definition_cache | 400 + (table_open_cache / 2) | MIN(400 + table_open_cache / 2, 2000) | 缓存表数,默认不配置,等其自适应即可 | 否 |
sort_buffer_size | 256KB | 256KB | 每个会话排序所需缓冲区,官方建议在256KB ~ 2M之间,若传输量大则忽略 | 否 |
read_buffer_size | 128KB | 128KB | 查询表的缓存区,通常根据最大数据量分配2M左右即可 | 否 |
read_rnd_buffer_size | 256KB | 256KB | sort查询后使用的读入缓存,建议与sort_buffer_size 一致 | 否 |
myisam_sort_buffer_size | 8M | 8M | 对排序索引操作时分配的缓冲区大小,普通查询也涵盖 | 是 |
thread_cache_size | 8 + (max_connections / 100) | 8 + (max_connections / 100) | 服务器缓存多少个线程以供重用 | 否 |
query_cache_size | 1M | 1M | 查询缓存大小(根据实际情况调整),8.0.3之后版本已经被去除 | 否 |
skip_name_resolve | 禁用域名解析,默认不开启,建议开启 | 否 | ||
lower_case_table_names | 0(unix),1(windows),2(macOs) | 0(unix),1(windows),2(macOs) | 表名是否区分大小写,1则忽略大小写 | 否 |
max_connections | 100 | 100 | 允许的同时客户的数量,默认数值是100,理论上默认500即可满足一般需求 | 否 |
back_log | 50 + (max_connections / 5) | 建议参考5.7版本 | 暂时停止回答新请求之前,短时间内可以被存在堆栈中连接数量 | 否 |
open_files_limit | 5000 | 4000 | 可以参考ulimit -n设置,但是设置65536就好 | 否 |
explicit_defaults_for_timestamp | OFF | OFF | 在默认情况下,如果timestamp 列没有显式的指明null属性,那么该列会被自动加上not null属性(而其他类型的列如果没有被显式的指定not null,那么是允许null值的),如果往这个列中插入null值,会自动的设置该列的值为current timestamp 值。 | 否 |
max_heap_table_size | 16MB | 16MB | 并发较大的话,可以适当提交以增加效率 | 否 |
④对应超时相关配置
属性名 | 参考默认值(5.7) | 参考默认值(8.0) | 备注 |
---|---|---|---|
connect_timeout | 10 | 10 | 连接应用超时时间,建议设置为N分钟 |
interactive_timeout | 28800 | 28800 | 交互连接上可以等待行动的秒数,建议酌情设置为数分钟 |
wait_timeout | 28800 | 28800 | 等待连接后不操作的秒数,然后断开,建议酌情设置为数分钟 |
expire_logs_days | 0 | 0 | 自动删除二进制日志文件的天数。默认值为 0,表示“无自动删除” |
⑤版本中过期配置
一个经典问题,涉及某些原因(你懂的),8.0.26后面涉及
slave
都会变成replica
,大都这样基本解决
属性名 | 参考默认值(5.7) | 参考默认值(8.0) | 备注 |
---|---|---|---|
query-cache-type | 5.7.20开始弃用 | MySQL 8.0中已删除 | 查询缓存类型 |
query_cache_size | 1M | 8.0.3之后版本已经被去除 | 查询缓存大小 |
slave_compressed_protocol | OFF | replica_compressed_protocol(8.0.26版本后使用这个参数名) | 使用源/副本连接协议的压缩,1为开启,默认不启用(建议开启) |
slave-skip-errors | OFF | 8.0.26开始,使用replica_skip_errors | 出现错误时忽略,以英文逗号分隔 all,所有错误ddl_exist_errors ,ddl的所有错误1007:数据库已存在,创建数据库失败 1008:数据库不存在,删除数据库失败 1050:数据表已存在,创建数据表失败 1051:数据表不存在,删除数据表失败 1054:字段不存在,或程序文件跟数据库有冲突 1060:字段重复,导致无法插入 1061:重复键名 1068:定义了多个主键 1094:位置线程ID 1146:数据表缺失,请恢复数据库 1053:复制过程中主服务器宕机 1062:主键冲突 Duplicate entry |
log-slave-updates | OFF | OFF 从8.0.26, use log_replica_updates | 副本服务器从源服务器接收的更新是否应记录到副本自己的二进制日志中 |
slave_load_tmpdir | 从8.0.26,use log_replica_updates | 复制副本在其中创建临时文件的目录,若未设置,会读取tmpdir 参数 |
3、mysqldump
属性名 | 参考默认值(5.7) | 参考默认值(8.0) | 备注 |
---|---|---|---|
quick | OFF | OFF | 对于转储大型表很有用。它强制mysqldump从服务器中一次一行地检索表的行,而不是检索整个行集并在写出之前将其缓冲到内存中。(使用时直接配置即可,不需要配置值) |
max_allowed_packet | 4MB | 4MB | 限制 一个数据包或任何生成/中间字符串的最大大小(通常归类为通用配置,但是习惯放在这个下面) |
五、常规操作
1、关于大小写敏感处理
实际上就是参数
lower_case_table_names
参数
1- 忽略大小写,0 - 默认值,区分大小写
这里默认为yum/apt安装的默认目录,故数据目录为:/var/lib/mysql
①停止MySQL
systemctl stop mysqld
②删除数据目录内容
即删除
/var/lib/mysql
目录下的内容
(这里必然是要备份的,不备份的话,这我就没话说了)
③在MySQL配置文件( /etc/my.cnf )中添加 lower_case_table_names=1
④重新启动 MySQL
会自动重新初始化的。
systemctl start mysqld
⑤检查是否生效
若 为如下值,建议重新查找配置文件
±-----------------------±------+
| Variable_name | Value |
±-----------------------±------+
| lower_case_file_system | OFF |
| lower_case_table_names | 0 |
————————————————
show variables like '%lower%'
2、主从配置
可参考 MySQL :: MySQL 8.0 Reference Manual :: 17 Replication
实际上整个复制过程是基于二进制日志文件去进行处理配置,所以务必源数据库(也就是所谓主数据库)必须要开启
log-bin
一、源/主库配置
默认目录/etc/my.cnf
(1)必要配置
参数名称 | 说明 | 缺省值 |
---|---|---|
server-id | 必须唯一,用作交互之间的mysql机器(取值1 到 232 − 1,0会拒绝任意源连接及被连接) | 1 |
server_uuid | 若为同一个mysql全量复制安装,需要变更此处,否则会直接中断报错(data_dir /auto.cnf) | 自动生成 |
log-bin | 设置了log-bin目录即可,用于存放日志 | ON |
(2)参考建议
参数名称 | 取值 | 默认值 | 说明 |
---|---|---|---|
innodb_flush_log_at_trx_commit | 1 | 1 | 建议是基于事务级别保存(但业务量不大可以设置为0) |
sync_binlog | 1 | 1 | 在提交事务之前将二进制日志同步到磁盘(但增加磁盘消耗,非极其重要的还是可以不开) |
binlog_format | mixed | row | 1、statement模式 不会记录每一条更改语句,节约资源但主从数据可能不一致 2、 row模式 记录每一条更改的语句,日志量非常大 3、 mixed模式 是前两者优点的综合,但日志结构较为复杂 |
binlog-do-db | 数据库名 | - | 可以限定只同步特定,若需要多个配置,重复此行 |
binlog-ignore-db | 数据库名 | - | 可以限定不同步特定,若需要多个配置,重复此行 |
(3)创建复制账户
其实这里主要是强调仅作复制权限的用户 ,涉及
REPLICATION SLAVE
,当然也可以直接用其他用户。username: copy
password:password
权限说明:
① replication client ,用于调用
show slave status
查看从库② replication slave ,用于允许同步状态(必须
CREATE USER 'copy'@'%' IDENTIFIED BY 'password';
# 单纯同步
GRANT REPLICATION SLAVE ON *.* TO 'copy'@'%';
#如果想看从库甚么水平
GRANT REPLICATION SLAVE,replication client ON *.* TO 'copy'@'%';
flush privileges;
二、从库配置
(1)必要配置
参数名称 | 说明 | 缺省值 |
---|---|---|
server-id | 必须唯一,用作交互之间的mysql机器(取值1 到 232 − 1,0会拒绝任意源连接及被连接) | 1 |
(2)参考建议
参数名称 | 取值 | 默认值 | 说明 |
---|---|---|---|
replicate-do-db | 数据库名 | - | 可以限定只同步特定,若需要多个配置,重复此行 |
replicate-ignore-db | 数据库名 | - | 可以限定不同步特定,若需要多个配置,重复此行 |
三、迁移操作
(1)同步复制节点(非必要,但建议)
主要为了配合第二步操作,设置同步节点,保证能从正确节点同步(当然,从0开始复制就可以忽略了
示例账户
username:demo
# 通过执行语句获取到demo数据库
mysqldump -udemo -p --skip-lock-tables --single-transaction --flush-logs --hex-blob --master-data=2 demo > /demo.sql
#获取log-bin 的节点文件和日志pos,用于方便同步讯息的节点。 通常由两种方式可以获取到第二步的 master_log_file & master_log_pos 讯息
cat demo.sql | grep CHANGE
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000016', MASTER_LOG_POS=157;
关于更多mysqldump属性细节可参考: [MySQL :: MySQL 8.0 Reference Manual :: 4.5.4 mysqldump — A Database Backup Program](
参数名称 | 解释说明 |
---|---|
skip-lock-tables | 跳过锁表,因为默认会锁的,期间可能导致业务出现问题 |
single-transaction | 此选项将事务隔离模式设置为 可重复读取 ,避免影响其他应用程序 |
flush-logs | 转储的时候会刷新一个新的log-bin文件(RELOAD privilege) |
hex-blob | 使用十六进制表示法转储二进制列(保证数据的一致性,主要是避免转码出问题) |
master-data | 2会将转储讯息和log-bin讯息也列入,方便我们配置主从时寻找节点(参考master-data取值 ) |
(2)配置主从方式
其实也是属于从库的配置内容,只不过为了统一说明,拉到这里
(1.1)配置文件方式
参数名称 | 说明 | 缺省值 |
---|---|---|
master_port | 必须唯一,用作交互之间的mysql机器(取值1 到 232 − 1,0会拒绝任意源连接及被连接) | 1 |
master_user | 第一步主库设置时设置的账户 | |
master_password | 第一步主库设置时设置的账户对应的密码 | |
master_log_file | log-bin的文件名,通常为开始节点(建议通过第一步获取的内容) | |
master_log_pos | 对应log-bin读取到的定位点(建议通过第一步获取的内容) |
(1.2)命令行运行方式
change master to master_host='master ip',
master_port=3306,
master_user='copy',
master_password='password',
master_log_file='mysql-bin.000016',
master_log_pos=157;
(3)相关命令
Both Slave_IO_Running & Slave_SQL_Running was work when value is yes
启动关闭主从状态
start slave
stop slave
查看主库状态
show master status\G
查看从库状态
show slave status\G
判断完全同步
* Master_Log_File 和 Relay_Master_Log_File 所指向的文件必须一致
* Relay_Log_Pos 和 Exec_Master_Log_Pos 位置也要一致才行
* Slave_SQL_Running_State: 显示为wait 中继日志的sql语句已经全部执行完毕
(4)执行异常
①Authentication plugin ‘caching_sha2_password’ reported error
该插件发现连接未加密,因此需要使用RSA加密来传输密码。但是,服务器不会将公用密钥发送给客户端,并且客户端未提供公用密钥,因此它无法加密密码并且连接失败
# 建议在连接前增加参数 --get-server-public-key 获取一次公钥先。
mysql -u copy -p -h localhost -P3306 --get-server-public-key
四、复制安全性
这里主要由于实际应用的基于
证书密钥
的情况,再次记录官方操作。