MySQL
mysqldump备份数据库
备份实例下的所有库
|
备份单个指定数据库
|
备份多个指定数据库
|
备份指定数据库中的单个表
|
备份指定数据库中的多个表
|
备份数据库表结构只包含DDL语句
|
备份数据库带库名
|
Xtrabackup备份数据库
安装
wget方式
安装qpress rpm包。
wget https://repo.percona.com/yum/release/7/RPMS/x86_64/qpress-11-1.el9.x86_64.rpm
rpm -ivh qpress-11-1.el9.x86_64.rpm安装Percona XtraBackup
MySQL 5.6、5.7,以下载并安装Percona XtraBackup 2.4.9为例
wget https://downloads.percona.com/downloads/Percona-XtraBackup-2.4/Percona-XtraBackup-2.4.29/binary/redhat/9/x86_64/percona-xtrabackup-24-2.4.29-1.el9.x86_64.rpm
rpm -ivh percona-xtrabackup-24-2.4.29-1.el9.x86_64.rpm
warning: percona-xtrabackup-24-2.4.29-1.el9.x86_64.rpm: Header V4 RSA/SHA256 Signature, key ID 8507efa5: NOKEY
error: Failed dependencies:
libatomic.so.1()(64bit) is needed by percona-xtrabackup-24-2.4.29-1.el9.x86_64
libev.so.4()(64bit) is needed by percona-xtrabackup-24-2.4.29-1.el9.x86_64
perl(DBD::mysql) is needed by percona-xtrabackup-24-2.4.29-1.el9.x86_64
rsync is needed by percona-xtrabackup-24-2.4.29-1.el9.x86_64
dnf install libatomic -y
dnf install libev -y
dnf install -y rsync
dnf install perl-DBD-MySQLMySQL 8.0,以下载并安装Percona XtraBackup 8.0为例
wget https://downloads.percona.com/downloads/Percona-XtraBackup-8.0/Percona-XtraBackup-8.0.32-26/binary/redhat/7/x86_64/percona-xtrabackup-80-8.0.32-26.1.el7.x86_64.rpm
rpm -ivh percona-xtrabackup-80-8.0.32-26.1.el7.x86_64.rpm --nodeps --force
备份
全量备份
|
执行命令后。可看到备份时间的文件夹
文件夹内容如下
差异备份
首先需要全量备份一次
|
然后按照全量备份生成的备份目录为基础
|
差异备份需要使用参数–incremental指定需要备份到哪个目录,使用incremental-dir指定全备目录
查看备份数据
恢复
全量备份恢复
|
同步服务器上的备份文件至本地
|
创建本地数据目录备份
|
合并数据日志,使数据文件处于一致性的状态
|
删除数据目录
|
进行数据恢复
|
赋予权限
|
临时关闭SELinux
|
永久关闭SELinux
差异备份恢复
|
删除数据目录
|
合并全备数据目录,确保数据的一致性
|
将差异备份数据合并到全备数据目录当中
|
恢复数据
|
赋予权限
|
临时关闭SELinux
|
永久关闭SELinux
Windows 下安装 绿色版
先下载MySQL :: Download MySQL Community Server
解压下载好的压缩包
解压后得到
新建一个
my.ini
文件解压后的mysql根目录下没有my.ini文件,自己去网上找一份就可或者使用我在后面给出的代码。.ini文件会在初始化mysql中用到
# For advice on how to change settings please see
# http=//dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html
# *** DO NOT EDIT THIS FILE. It's a template which will be copied to the
# *** default location during install, and will be replaced if you
# *** upgrade to a newer version of MySQL.
[client]
port = 3306
default-character-set = utf8
[mysqld]
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
# Remove leading # to turn on a very important data integrity option= logging
# changes to the binary log between backups.
# log_bin
port = 3306
# These are commonly set, remove the # and set as required.
basedir="D:\app\mysql-5.7.43-winx64"
datadir="D:\app\mysql-5.7.43-winx64\data"
# server_id = .....
character_set_server = utf8
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES修改ini配置文件中的安装目录和数据存放目录修改为mysql文件的路径
#设置mysql的安装目录
basedir=D:\app\mysql-5.7.43-winx64
#设置mysql数据库的数据的存放目录
datadir=D:\app\mysql-5.7.43-winx64\data打开cmd,初始化数据库
mysqld --initialize
初始化完成后,mysqld根目录下会自动新增data文件夹
打开data文件夹,找到.err后缀文本打开
找到文件password位置,红色框中为数据库初始化密码,后续修改初始化密码使用
2023-10-07T04:37:02.330654Z 1 [Note] A temporary password is generated for root@localhost: (iw?Mw:Vs7n&
安装数据库
mysqld --install <服务名>
启动服务
net start mysql
关闭服务
net stop mysql
修改初始密码
登录
mysql -uroot -p'你的初始密码,步骤4中红框里的字符'
修改密码为 123456
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'root';
服务卸载
net stop mysql
mysqld --remove
Linux 安装MySQL
安装
在浏览器下载Linux系统的MySQL客户端安装包。建议您下载的MySQL客户端版本高于已创建的GaussDB(for MySQL)实例中数据库版本。
在下载页面找到对应版本链接,以mysql-community-client-8.0.21-1.el6.x86_64为例,打开页面后,即可下载安装包。
将安装包上传到ECS。
执行以下命令安装MySQL客户端。
rpm -ivh mysql-community-client-8.0.21-1.el6.x86_64.rpm如果安装过程中报conflicts,可增加replacefiles参数重新安装,如下:
rpm -ivh –replacefiles mysql-community-client-8.0.21-1.el6.x86_64.rpm
如果安装过程中提示需要安装依赖包,可增加nodeps参数重新安装,如下:
rpm -ivh –nodeps mysql-community-client-8.0.21-1.el6.x86_64.rpm
连接
mysql -h <*host*> -P
-u <*userName*> -p
示例:mysql -h 192.168.0.16 -P 3306 -u root -p
参数说明
参数 说明 <*host*> 获取的读写内网地址。 获取的数据库端口,默认3306。 <*userName*> 管理员帐号root。 出现如下提示时,输入数据库帐号对应的密码。
Enter password:
报错mysql: error while loading shared libraries: libssl.so.10: cannot open shared object file: No such file or directory
下载rpm包:
https://mirrors.aliyun.com/centos/8/AppStream/x86_64/os/Packages/compat-openssl10-1.0.2o-3.el8.x86_64.rpm
安装rpm包:rpm -i compat-openssl10-1.0.2o-3.el8.x86_64.rpm
错误:依赖检测失败:
make 被 compat-openssl10-1:1.0.2o-3.el8.x86_64 需要
rpm -i compat-openssl10-1.0.2o-3.el8.x86_64.rpm --nodeps --force
mysql: error while loading shared libraries: libncurses.so.5: cannot open shared object file: No such file or directory
cp /usr/lib64/libncurses.so.6 /usr/lib64/libncurses.so.5
mysql: error while loading shared libraries: libtinfo.so.5: cannot open shared object file: No such file or directory
cp /usr/lib64/libtinfo.so.6 /usr/lib64/libtinfo.so.5
Linux 卸载MySQL
二进制方式
|
MySQL 客户端
执行脚本
|
用户和权限
用户各项权限
|
创建管理员用户
|
限制只能本地登录root
|
修改root密码
|
允许远程登录
|
忘记密码重置
Windows
首先停止服务
使用管理员用户打开CMDnet stop MYSQL
MYSQL为MySQL数据库服务名称
将MySQL 数据目录 C:\ProgramData\MySQL\MySQL Server 5.7 下的Data目录复制到 程序目录 C:\Program Files\MySQL\MySQL Server 5.7 下
进入MySQL bin目录
cd "C:\Program Files\MySQL\MySQL Server 5.7\bin"
mysqld --skip-grant-tables–skip-grant-tables 的意思是启动 MySQL 服务的时候跳过权限表认证
重新打开一个cmd窗口,输入 mysql 回车
cd "C:\Program Files\MySQL\MySQL Server 5.7\bin"
mysql连接权限数据库:use mysql
修改数据库连接密码
update user set authentication_string =password('123456') where user='root';
flush privileges;
exit;修改root 密码后,需要执行下面的语句和新修改的密码。不然开启 mysql 时会出错
mysqladmin -u root -p shutdown
将程序目录 C:\Program Files\MySQL\MySQL Server 5.7 下的Data文件夹下复制到数据目录 C:\ProgramData\MySQL\MySQL Server 5.7 下
重启 mysql
net start mysql
存储过程和函数
函数
创建函数要加上DELIMITER $$、$$ DELIMITER
MySQL 8 还需要执行
|
信息数据库(information_schema)
查看某数据库中所有表的行数
|
主从搭建
主节点配置
修改/etc/my.cnf文件,并重启服务
[mysqld]
server-id=10 #服务器id (主从必须不一样)
log-bin=/var/lib/mysql/master10-bin #打开日志(主机需要打开)
binlog-ignore-db=mysql #不给从机同步的库(多个写多行)
binlog-ignore-db=information_schema
binlog-ignore-db=performance_schema
binlog-ignore-db=sys注意:log-bin等存储路径的配置,其父路径的属主和组必须是是mysql,且一般权限设置为777。
如果更改了mysql的存储目录,建议参考默认配置的目录,将新目录的属主和权限也做相应更改
创建从节点访问用户(mysql上执行)
CREATE USER 'slave'@'10.181.110.11' IDENTIFIED BY 'slave.8888';
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'10.181.110.11';
select user,host from mysql.user;查看主节点状态(mysql上执行)
systemctl restart mysql #重启服务
show master status
从节点配置
修改/etc/my.cnf文件,并重启服务
server-id=11
relay-log=relay-bin
read-only=1
replicate-ignore-db=mysql # 不复制的库
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
replicate-ignore-db=sys从库关联主库(mysql上执行)
CHANGE MASTER TO MASTER_HOST='10.0.2.3',
MASTER_USER='slave',
MASTER_PASSWORD='slave.123456',
MASTER_LOG_FILE='master10-bin.000001',
MASTER_LOG_POS=154;检查状态(mysql上执行)
start slave;
show slave status\G注意:# master_log_file 和 master_log_pos值为主库上面执行show master status得到
如果 Slave_IO_Running 和 Slave_SQL_Running 都为 Yes,说明配置成功
# 如果又更改了其他配置,重启服务后导致上面两个参数出现NO,可以重新执行步骤 2
同步故障
Slave_SQL_Running:No
原因是主机和从机里的数据不一致
Slave_IO_Running:Connecting
是因为从机使用你配置的主机信息没有登陆到主机里面!修改(从机里面)
|
Slave_IO_Running:No
就是server-id 没有配置成功的原因,需要重新修改配置文件,复制配置文件到容器里面,然后重启就ok
二进制日志文件(binlog)
查看是否开启
|
配置
|
MyCat 2
安装
首先去Gitee代码仓库clone源码
|
打开项目,注意jdk版本需要用oracle jdk1.8,否则没有javafx包
Maven下载依赖
修改父级pom.xml
文件中的<repository>
标签,http后加s
|
执行maven clean install -DskipTests
编译后的包位于根目录下的mycat2\target\mycat2-1.22-release-jar-with-dependencies.jar
修改根目录下的start.bat
批处理文件
|
根据项目目录进行修改
配置
配置目录为根目录下的mycat2\src\main\resources
datasources
|
启动
运行根目录下的start.bat
命令
查看连接源
|
添加数据源
|
查看集群
|
添加集群
|
创建库
|
创建表
|
分库分表
原理
一个数据库由很多表的构成,每个表对应着不同的业务,垂直切分是指按照业务将表进行分布到不同的数据库上面,这样也就将数据或者说压力分担到不同的库上面
垂直切分:分库
系统被拆分为用户、订单、支付多个模块,部署在不同机器上。
分库的原则:由于跨库不能关联查询,所以有紧密关联的表应当放在一个数据库中,相互没有关联的表可以分不到不同的数据库。
水平切分:分表
常用的分片规则
分片算法简介
Mycat2支持常用的(自动)HASH型分片算法也兼容1.6的内置的(cobar)分片算法。
HASH型分片算法默认要求集群名字以c为前缀,数字为后缀,c0就是分片表第一个节点,c1就是第二个节点
,该命名规则允许用户手动改变。mycat2与1.X版本区别
mycat2的hash型分片算法多基于MOD_HASH,对应Java的%取余运算。
mycat2的hash型分片算法对于值的处理,总是把分片值转换到列属性的数据类型再做计算。
mycat2的hash型分片算法适用于等价条件查询。分片规则与适用性
分片算法 描述 分库 分表 数值类型 MOD_HASH 取模哈希 是 是 数值,字符串 UNI_HASH 取模哈希 是 是 数值,字符串 RIGHT_SHIFT 右移哈希 是 是 数值 RANGE_HASH 两字段其一取模 是 是 数值,字符串 YYYYMM 按年月哈希 是 是 DATE,DATETIME YYYYDD 按年月哈希 是 是 DATE,DATETIME YYYYWEEK 按年周哈希 是 是 DATE,DATETIME HASH 取模哈希 是 是 数值,字符串,如果不是,则转换成字符串 MM 按月哈希 否 是 DATE,DATETIME DD 按日期哈希 否 是 DATE,DATETIME MMDD 按月日哈希 是 是 DATE,DATETIME WEEK 按周哈希 否 是 DATE,DATETIME STR_HASH 字符串哈希 是 是 字符串
常用分片规则简介
MOD_HASH
[数据分片]hash形式的分片算法。如果分片键是字符串,会将字符串hash转换为数值类型。
- 分库键和分表键相同:
- 分表下标:分片值%(分库数量*分表数量)
- 分库下标:分表下表/分库数量
- 分库键和分表键相同:
- 分表下标:分片值%分表数量
- 分库下标:分片值%分库数量
RIGHT_SHIFT
[数据分片]hash形式的分片算法。仅支持数值类型。
分片值右移两位,按分片数量取余。
YYYYMM
[数值分片]hash形式的分片算法。仅用于分库。
(YYYY*12+MM)%分库数量,MM为1–12。
MMDD
仅用于分表。仅DATE、DATETIME类型。
一年之中第几天%分表数。tbpartitions不能超过366。