当前位置: 首页 > news >正文

MySQL集群运维

MySQL运维操作

用户管理(创建、删除、授权)

  • 用户分类:管理员用户、普通用户
  • 管理员用户:'root'@'localhost',系统默认创建,拥有所有权限;
  • 普通用户:管理员创建的用户,默认只能看到语法库,权限来自管理员赋予;

创建用户

#创建用户(本地用户、远程用户)
mysql> create user '用户名'@'localhost' idntified by '用户密码';
mysql> create user '用户名'@'%' identified by '用户密码';
#管理权限
mysql> grant 用户权限 on 数据库名.数据库表 to '用户名'@'登录地址';
mysql> show grants for '用户名'@'登录地址';
mysql> revoke 用户权限 on 数据库名.数据库表 from '用户名'@'登录地址';
#创建新用户的同时直接授权
mysql> grant 用户权限 on 数据库名.数据库表 to '用户名'@'登录地址' identified by '用户密
码';

密码管理(设置、修改、忘记)

#初始化密码,即为用户第一次设置密码
#普通用户
mysql> create user '用户名'@'登录地址' identified by '用户密码';
#管理员用户(root@localhost)
mysql> alter user '用户名'@'登录地址' identified by '用户密码';

修改密码

  • 普通用户修改密码:set password=password('新密码');[管理员也可以用]
  • 管理员用户修改密码: alter user '用户名'@'登录地址' identified by '用户密码';或:set password for '用户名'@'登录地址'= password("新密码");

忘记密码找回

  • 普通用户:找管理员初始化
  • 管理员用户:修改配置文件,重设密码

步骤——

(1)在mysql配置文件中跳过权限验证

vim /etc/my.cnf.d/mariadb-server.cnf[mysqld]
skip-grant-tables    #添加跳过权限表验证#重启mysql服务
systemctl restart mariadb

(2)直接无密码进入mysql即可

[root@localhost ~]# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 10.5.22-MariaDB MariaDB ServerCopyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MariaDB [(none)]> 

(3)数据库重设密码

#重启数据库后,若没有更新权限,是无法重设密码的
MariaDB [(none)]> alter user 'root'@'localhost' identified by '123';
ERROR 1290 (HY000): The MariaDB server is running with the --skip-grant-tables option so it cannot execute this statement#刷新权限
MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.003 sec)
#重设密码
MariaDB [(none)]> alter user 'root'@'localhost' identified by '123';
Query OK, 0 rows affected (0.002 sec)或:
mysql> set password for root@localhost= password("新密码");
mysql> exit

(4)恢复配置文件,重启数据库,用新密码登录

vim /etc/my.cnf.d/mariadb-server.cnf
#去掉skip-grant-table
systemctl restart mariadb
#登录
[root@localhost ~]# mysql -uroot -p123
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 6
Server version: 10.5.22-MariaDB MariaDB ServerCopyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.MariaDB [(none)]>

数据管理(备份与恢复)

注:数据管理就是数据的备份和同步;若备份的是用户密码,恢复备份时记得刷新权限

方法一:rsync

  • 备份数据位置:/var/lib/mysql
  • 备份策略:日增量备份、周完全备份、每月进行还原测试
  • 还原测试:搭建另一个生产测试环境,导入备份数据,测试

方法二:mysqldump

注:mysqldump命令备份、mysql还原

(1)备份一个数据库

  • mysqldump -u用户名 -p密码 要备份的数据库名 > 文件名.sql

(2)备份一个数据库表

  • mysqldump -u用户名 -p密码 要备份的数据库名 表名 > 文件名.sql

(3)备份多个数据库(或-B)

  • mysqldump -u用户名 -p密码 --databases 数据库名1 数据库名2 > 文件名.sql

(4)备份所有数据库(或-A)

  • mysqldump -u用户名 -p密码 --all-databases > 文件名.sql

  (5)还原数据库

注:复备份的是一个数据库的时候需要手动创建数据库、再指定还原

  • mysql -u用户名 -p密码 要还原到的数据库名 < 文件名.sql

(6)还原多个数据库

  • mysql -u用户名 -p密码 < 文件名.sql

注:-B——备份多个库;-A:备份所有库;-d:只备份表;-t:只备份表中数据

方法三:日志备份

(1)查看二进制日志文件

MariaDB [(none)]> show variables like '%log%';
  • 查询日志:general_log,记录所有查询语句
  • 慢查询日志:slow_query_log,显示时间较慢的查询
  • 二进制日志:log_bin,记录改变数据结构的语句
  • 中继日志:relay_log,主从结构中的同步的日志

(2)开启二进制日志配置,产生二进制日志

vim /etc/my.cnf.d/mariadb-server.cnf
#等号左边是开启二进制日志、等号右边的是二进制日志的文件名
log-bin=mysql-bin#重启服务
systemctl restart mariadb

(3)查看二进制日志

[root@localhost ~]# cd /var/lib/mysql/
[root@localhost mysql]# ls
@65b0@5e93         db1   ib_buffer_pool  ibtmp1             mysql-bin.000001  mysql_test
aria_log.00000001  db10  ibdata1         multi-master.info  mysql-bin.index   mysql_upgrade_info
aria_log_control   db2   ib_logfile0     mysql              mysql.sock        performance_schema
[root@localhost mysql]# mysqlbinlog mysql-bin.000001或:
MariaDB [(none)]> show binary logs;
+------------------+-----------+
| Log_name         | File_size |
+------------------+-----------+
| mysql-bin.000001 |       328 |
+------------------+-----------+
1 row in set (0.000 sec)MariaDB [(none)]> show binlog events in 'mysql-bin.000001';
+------------------+-----+-------------------+-----------+-------------+------------------------------------------------+
| Log_name         | Pos | Event_type        | Server_id | End_log_pos | Info                                           |
+------------------+-----+-------------------+-----------+-------------+------------------------------------------------+
| mysql-bin.000001 |   4 | Format_desc       |         1 |         256 | Server ver: 10.5.22-MariaDB-log, Binlog ver: 4 |
| mysql-bin.000001 | 256 | Gtid_list         |         1 |         285 | []                                             |
| mysql-bin.000001 | 285 | Binlog_checkpoint |         1 |         328 | mysql-bin.000001                               |
+------------------+-----+-------------------+-----------+-------------+------------------------------------------------+
3 rows in set (0.001 sec)

(4)指定二进制事件的起止位置进行数据恢复

mysqlbinlog --start-position [起始值] --stop-position [终止值] erjinzhi.000001 | mysql -
uroot -p123

相关日志操作

  • 查看系统中的日志相关的参数,有:general_log, bin_log, relay_log, slow_query_log
  • relay_log用于主从同步时从主上同步过来的日志,存储格式是二进制的,但没有开关,需要时用即可

(1)开启通用查询日志(gennral_log)

vim /etc/my.cnf.d/mariadb-server.cnfgeneral_log=on    #指定通用日志文件名,默认在数据文件位置、名字为:主机名.log
general_log_file=/var/lib/mysql/general.log  systemctl restart mariadb

重启服务后,在/var/lib/mysql目录下会创建一个general.log日志记录操作信息

[root@localhost ~]# cd /var/lib/mysql/
[root@localhost mysql]# ls
@65b0@5e93         db1   general.log     ib_logfile0        mysql             mysql-bin.state  mysql_upgrade_info
aria_log.00000001  db10  ib_buffer_pool  ibtmp1             mysql-bin.000001  mysql.sock       performance_schema
aria_log_control   db2   ibdata1         multi-master.info  mysql-bin.index   mysql_test#另开一个窗口操作数据库,这边可以实时监控
[root@localhost mysql]# tail -f general.log 
/usr/libexec/mariadbd, Version: 10.5.22-MariaDB-log (MariaDB Server). started with:
Tcp port: 0  Unix socket: /var/lib/mysql/mysql.sock
Time		    Id Command	Argument
250919 19:57:12	     3 Connect	root@localhost on  using Socket3 Query	select @@version_comment limit 1
250919 19:57:25	     3 Query	show databases
250919 19:57:40	     3 Query	SELECT DATABASE()3 Init DB	db23 Query	show databases3 Query	show tables3 Field List	paihangbang 3 Field List	tzhong 3 Field List	xinxi 
250919 19:57:46	     3 Query	show tables
250919 19:57:54	     3 Query	select * from xinxi

(2)开启慢查询日志(slow_query_log)

vim /etc/my.cnf.d/mariadb-server.cnfslow_query_log=on    #指定通用日志文件名,默认在数据文件位置、名字为:主机名-slow.log
slow_query_log_file=/var/lib/mysql/slow.log
long_query_time=3systemctl restart mariadb

数据库执行一个耗时较长的查询:

MariaDB [db2]> select sleep(4);
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id:    3
Current database: db2+----------+
| sleep(4) |
+----------+
|        0 |
+----------+
1 row in set (4.016 sec)MariaDB [db2]> show global status like '%Slow_queries%';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| Slow_queries  | 1     |
+---------------+-------+
1 row in set (0.001 sec)

注:一般找到执行较慢的sql语句,进行优化,建立索引;添加没有任何约束力的一般索引:create index...

MySQL异步复制集群

主从服务原理

从服务器:

  • I/O thread:I/O线程,用于读写操作,即远程获取主服务上的二进制日志、并写到自己的中继日志中
  • sql thread:sql线程,用于将中继日志的sql语句运行在自己的数据库里
  • relay log:中继日志,连接master和slave,是同步的核心

主服务器:

  • I/O thread:I/O线程,用于对接从服务器的IO线程
  • binlog:二进制日志,记录主服务器上的操作记录
  • 远程用户:用于在从服务器上获取主服务器的二进制日志

主从服务自动同步数据(单向)

  1. 第一次全量同步,主服务器打开日志权限,创建远程用户
  2. 从服务器start slave主动去主服务器拉取数据(因此主创建的远程用户至少要有拿二进制日志的权限),到中继日志里(IO线程)
  3. 从服务器把中继日志里的SQL运行在自己库里(sql线程)
  4. 之后,在主未改动时,两边的线程进入休眠状态
  5. 当主再次改动数据,存入二进制日志,并推送给从服务

主服务器(77.77)

安装mysql、启动服务

  • dnf -y install mariadb mariadb-server

配置主配置文件

vim /etc/my.cnf.d/mariadb-server.cnflog-bin=mysql-binserver-id=1    #所有mysql服务的server-id不能相同
systemctl restart mariadb

创建用于同步的用户、并授权

MariaDB [(none)]> grant all on *.* to 'zhangwei'@'%' identified by '123';
Query OK, 0 rows affected (0.002 sec)

查看服务器日志文件及偏移量

MariaDB [(none)]> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000002 |      503 |              |                  |
+------------------+----------+--------------+------------------+
1 row in set (0.000 sec)

从服务器(77.78)  

安装mysql、启动服务

  • dnf -y install mariadb mariadb-server

配置主配置文件

vim /etc/my.cnf.d/mariadb-server.cnfserver-id=2systemctl restart mariadb

设置同步

  • mysql> change master to master_host='主服务器IP',master_user='同步用户',master_password='同步用户密码',master_log_file='二进制文件',master_log_pos=偏移量;
MariaDB [(none)]> change master to master_host='192.168.77.77',master_user='zhangwei',master_password='123',master_log_file='mysql-bin.000002',master_log_pos=503;
Query OK, 0 rows affected (0.010 sec)

开启同步

  • mysql> start slave;
  • 或:
  • mysql> start replica;
MariaDB [(none)]> start slave;
Query OK, 0 rows affected (0.002 sec)

查看同步状态

注:若两个线程都是yes,证明主从同步配置成功

  • mysql> show slave status\G;
  • 或:
  • mysql> show replica status\G;

MariaDB [(none)]> show slave status\G;
*************************** 1. row ***************************Slave_IO_State: Waiting for master to send eventMaster_Host: 192.168.77.77Master_User: zhangweiMaster_Port: 3306Connect_Retry: 60Master_Log_File: mysql-bin.000002Read_Master_Log_Pos: 503Relay_Log_File: mariadb-relay-bin.000002Relay_Log_Pos: 555Relay_Master_Log_File: mysql-bin.000002Slave_IO_Running: YesSlave_SQL_Running: Yes1 row in set (0.000 sec)

测试同步状态

原理

  • 在主服务器内创建数据库、插入数据,在从服务器上可以查询到;
  • 主从库间数据同步是单向的,即从上可以写入但不会同步到主;

(1)在主服务器(77.77)创建库、表,插入数据

MariaDB [(none)]> create database test_one;
Query OK, 1 row affected (0.001 sec)MariaDB [(none)]> use test_one
Database changed
MariaDB [test_one]> create table xinxi(-> id int,-> name varchar(20));
Query OK, 0 rows affected (0.008 sec)MariaDB [test_one]> insert into xinxi values(1,'zhangsan'),(2,'lisi'),(3,'wangwu');
Query OK, 3 rows affected (0.003 sec)
Records: 3  Duplicates: 0  Warnings: 0MariaDB [test_one]> select * from xinxi;
+------+----------+
| id   | name     |
+------+----------+
|    1 | zhangsan |
|    2 | lisi     |
|    3 | wangwu   |
+------+----------+
3 rows in set (0.001 sec)

(2)在从服务器(77.78)查看

MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test_one           |
+--------------------+
4 rows in set (0.001 sec)MariaDB [(none)]> use test_one;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
MariaDB [test_one]> show tables;
+--------------------+
| Tables_in_test_one |
+--------------------+
| xinxi              |
+--------------------+
1 row in set (0.000 sec)MariaDB [test_one]> select * from xinxi;
+------+----------+
| id   | name     |
+------+----------+
|    1 | zhangsan |
|    2 | lisi     |
|    3 | wangwu   |
+------+----------+
3 rows in set (0.000 sec)

注:

  1. mysql集群中,所有mysql服务的server-id不能相同
  2. 数据同步方向:单向,从上可以写入,但不会同步
  3. 主服务器重启生成一个二进制日志文件,从上也会同步
http://www.dtcms.com/a/390938.html

相关文章:

  • 未来浏览器:重新定义信息获取与交互
  • Mybatis-plus插件功能
  • weex分析美联储降息新周期:市场迎来机遇与挑战
  • Micronaut 集成 SPL 实现微服务
  • 类加载的过程以及双亲委派模型
  • 将 RabbitMQ 与 .NET Core Web API 和 Worker Services 结合使用
  • 面试编程题(三)
  • SSD性能优化之4K对齐
  • dolphindb vscode更改连接配置的操作步骤
  • 船用配电盘在线绝缘监测故障定位系统
  • 爬虫逆向--Day22Day23--核心实战案例【四川农机购置与补贴信息】【Webpack国密SM3、SM4】
  • 计算机网络————第二章 物理层
  • uniapp usb调试鸿蒙一直连接不上。
  • MySQL独立表空间:优缺点与最佳实践
  • 直播预告 | P4 One正式发布:让创新协作更简单、更安全、更可靠
  • Zookeeper脑裂是什么原因导致的?
  • APK360加固与“脱壳”:移动应用安全的攻与防
  • langchain-routerchain
  • 第四章:VSCode编辑器使用介绍
  • Problem: lab-week3- exercise03 Selection sort
  • Vue 事件总线 主流的一些npm包推荐
  • 总线协议如何支持总线错误条件?
  • N-156基于springboot,vue小区物业管理系统
  • 物理心理学 (Psychophysics) - 阈值 (Threshold) 测量方法 - 人因工程笔记2
  • 从 “数据采集” 到 “性能跃迁”:Simcenter LMS 如何用振动噪声试验,激活高端装备核心竞争力?
  • 【STL vector的全面指南】基础操作与底层实现<1>
  • 微服务-基础知识(CAP、BASE)
  • 存储卷清理策略在vps环境磁盘空间维护的操作指南
  • Day46 ARM硬件体系 从计算机架构、处理器类型、指令集到内核寄存器与SoC总线结构
  • 【MySQL】从视图到用户和权限管理