mysql运维

35 阅读4分钟

mysql内置函数

在 MySQL 中,version 不能单独使用,必须以函数调用的形式 version() 使用  SELECT verison();




在 MySQL 外部,可以通过以下方式获取版本信息:
使用 mysql --version 查看客户端版本。
使用 mysqladmin version 查看服务器版本。
在 MySQL 内部,version() 和 @@version 都可以用来获取服务器版本。


函数名	          功能描述	               示例
@@version	     返回 MySQL 服务器的版本号	       SELECT @@version;
DATABASE()	     返回当前数据库的名称	            SELECT DATABASE();
USER()	         返回当前登录用户的用户名和主机名	SELECT USER();
CURRENT_USER()	返回当前会话的实际认证用户	       SELECT CURRENT_USER();
SESSION_USER()	返回当前会话的会话用户h i6	           SELECT SESSION_USER();
SYSTEM_USER()	返回当前会话的系统用户	          SELECT SYSTEM_USER();
NOW()	        返回当前日期和时间	               SELECT NOW();
CONNECTION_ID()	返回当前连接的唯一 ID	         SELECT CONNECTION_ID();
把now()输出的结果转为参数

字符集在配置文件的定义:

客户端配置文件和服务端配置文件不一样时会导致输入输出结果出现乱码


服务端定义使用的字符集:
/etc/my.cnf.d/mysql-server.cnf
下面加上character-set-server=latin1
客户端定义使用的字符集:
/etc/my.cnf.d/client.cnf
default-character-set=latin1


Server 端:负责数据的存储和管理,定义数据库、表、列的字符集。
Client 端:负责与用户交互,定义客户端发送和接收数据时使用的字符集。

忘记密码

编辑vim /etc/my.cnf.d/mysql-server.cnf
添加两条:skip-grant-tables和skip-networking
skip-grant-tables跳过权限验证,无需身份验证就可以登录
skip-networking禁用网络监听,仅允许本地连接


[root@localhost ~]# systemctl restart mysqld.service
[root@localhost ~]# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 7
Server version: 8.0.26 Source distribution
Copyright (c) 2000, 2021, 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>
#步骤1
mysql> update mysql.user set authentication_string='' where user='root' and
host='localhost';
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
#步骤2
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
#再执行下面命令
mysql> alter user root@'localhost' identified by 'xiaomi';
Query OK, 0 rows affected (0.00 sec)

数据库备份

冷备份

systemctl stop mysqld
tar czf /path/to/backup/my-bak.tar.gz -C /var/lib/mysql .
先打包

删除后恢复

tar czf /path/to/backup/mysql-data-backup.tar.gz -C /usr/local/mysql data
tar xzf /my-bak.tar.gz /usr/local/mysql/data
chown -R mysqld:mysql /usr/local/mysql/data
systemctl start mysqld
恢复数据:

mysql逻辑备份

逻辑备份实际上是把被删除的数据还原到同名数据库

mysqldump -u root -p xxx数据库名>  /xxx/xxx/           恢复单个数据库
mysqldump -uroot -p --databases xx数据库名  >  /xxx/xxx     
--batabases子选项使你可以备份一个或多个数据,而且恢复时不用重新创建数据库


恢复数据
使用mysqldump备份恢复的库是新创建的一个库,和之前备份的一样的数据
create databases xxxx 创建那个删除的库名
source /xxxx/xx  使用备份时导入的文件恢复

mysql增量备份

增量备份类似于快照功能

在mysql安装后生成的配置文件/etc/my.cnf里编辑
在[mysqld]下添加一行
log-bin=mysql-bin 来启用二进制日志。然后重启服务
在安装路径下/usr/local/mysql/data可以看到日志文件mysql-bin.000001
这是启用二进制日志后第一次生成的日志记录,这个日志开始记录从开启服务到以后的所有变更操作
输入mysqladmin -uroot -p flush-log刷新日志来开启新的二进制文件这个文件名是mysql-bin.0000002
旧的依然存档




vim /etc/my.cnf
------------------------
[mysqld]
log-bin=mysql-bin#这段下面最后加一行


mysqladmin -uroot -p flush-logs 
Enterpassword:
#新产生的mysql-bin.000002只记录上次刷新后的操作
ls /usr/local/mysql/data/
auto.cnf        ibdata1      ib_logfile1  mysql             mysql-bin.000002  performance_schema  sys      ib_buffer_pool  ib_logfile0  ibtmp1       mysql-bin.000001  mysql-bin.index   school              your_database_name
#查看日志文件,vim看日志是乱码
mysqlbinlog --no-defaults --base64-output=decode-rows -v /usr/local/mysql/data/mysql-bin.000002




#恢复操作,恢复时如果被拒绝,是有其他mysql进程占用了
mysqlbinlog --no-defaults /var/lib/mysql/mysql-bin.000001


如果二进制日志未记录插入操作:
还原到删除操作之前的时间点无法恢复数据。
需要依赖其他数据源(如备份文件或外部日志)进行恢复。