MySQL
  • CentOS7系统下搭建MySQL(8.0.16)主从环境

    默认情况下,复制是异步的,从站不需要永久连接以接收来自主站的更新。根据配置,您可以复制数据库中的所有数据库,所选数据库甚至选定的表。 MySQL中复制的优点包括: 横向扩展解决方案 - 在多个从站之间分配负载以提高性能。在此环境中,所有写入和更新都必须在主服务器上进行。但是,读取可能发生在一个或多个从站上。该模型可以提高写入性能(因为主设备专用于更新),同时显着提高了越来越多的从设备的读取速度。 数据安全性 - 因为数据被复制到从站,并且从站可以暂停复制过程,所以可以在从站上运行备份服务而不会破坏相应的主数据。 分析 - 可以在主服务器上创建实时数据,而信息的分析可以在从服务器上进行,而不会影响主服务器的性能。 远程数据分发 - 您可以使用复制为远程站点创建数据的本地副本,而无需永久访问主服务器。 1.官网下载安装包 https://dev.mysql.com/downloads/mysql/ 压缩包有如下内容: 说明: 标准安装:安装 mysql-community-server, mysql-community-client, mysql-community-libs, mysql-community-common,和 mysql-community-libs-compat包。 标准安装之后的文件布局如下: 2.开始安装  把文件上传到服务器,解压。 [root@localhost soft]# mkdir mysql8 [root@localhost soft]# tar -xvf mysql-8.0.16-1.el7.x86_64.rpm-bundle.tar -C /soft/mysql8/   然后进入解压目录安装: 选择y,最后出现Complete! 两台全部安装完后,进行配置。 3.基于二进制日志文件位置的复制 传统方法基于master的二进制日志复制事件,并要求其中的日志文件和位置在master和slave之间同步。  1. 打开主服务器。去修改配置文件,设置日志文件名称和服务器ID,以及需要复制的数据库 [root@localhost mysql8]# vim /etc/my.cnf   2. 打开从服务器,配置服务器ID 3. 配置……

    SE_Zhang 2024-04-23
    8 0 0
  • 解决mysql8报错:ERROR 1410 (42000): You are not allowed to create a user with GRANT

    1. 今天刚装了mysql8.0.13,试着分配几个账号和权限,结果报错: 2. 查资料得知mysql8的分配权限不能带密码隐士创建账号了,要先创建账号再设置权限 输入命令:Grant all privileges on test.* to 'test'@'%'; 又报错:You are not allowed to create a user with GRANT ;   不允许使用grant命令,怎么会没权限,奇怪。 3.后来想到了mysql数据表user中的host 于是修改host:update user set host='%' where user='test';   再执行两次  Grant all privileges on test.* to 'test'@'%'; 成功:   但连接Navicat报错 这是因为mysql8的加密方式和Navicat不一样 4.修改加密方式 alter user test identified with mysql_native_password by 'xxx'; 再试,搞定!

    SE_Zhang 2024-04-22
    77 0 0
  • mysql数据库导入sql文件时提示“Error Code: 1153 – Got a packet bigger than ‘max_allowed_packet’ bytes”解决办法

    向mysql数据库中导入sql文件时,如果文件过大(几百M),会提示“Error Code: 1153 - Got a packet bigger than 'max_allowed_packet' bytes” 1.查看目前数据库配置 show VARIABLES like '%max_allowed_packet%'; 显示如下结果 +--------------------+---------+ | Variable_name | Value | +--------------------+---------+ | max_allowed_packet | 1048576 | +--------------------+---------+ 说明目前的配置是:1048576/1024/1024 = 1M 2.修改my.ini文件中“max_allowed_packet”的值 路径在mysql的安装目录中 3.修改后,重启mysql服务 在cmd窗口下,先执行net stop mysql;再执行net start mysql 然后再到sqlyog中执行show VARIABLES like '%max_allowed_packet%';发现值已更改

    SE_Zhang 2024-04-19
    66 0 0
  • Navicat连接MySQL8报1130-授权问题

    官网下载的版本8.0.15msi版本,直接下一步下一步安装完成之后,本地访问正常,然后服务器安装访问也正常。然后本地连接服务器上的mysql时报错。 百度一查,了解,原来是服务器上的mysql没有开放权限。 接下来在服务器上的命令提示符进去安装目录输入这句sql,但是一直提示语句报错,当使用 grant 权限列表 on 数据库 to '用户名'@'访问主机' identified by '密码'; 时会出现"......near 'identified by '密码'' at line 1"这个错误,整个晚上一直都在百度各种方法,几乎千篇一律,开放权限的sql都是这句话,加空格,切换大小写什么的都试过了,统统都不行,后来才百度到两篇帖子,发现这是因为mysql版本的原因。 因为新版的的mysql版本已经将创建账户和赋予权限的方式分开了 mysql> CREATE USER 'username'@'%' IDENTIFIED BY 'yourpassword';          //创建账户 mysql> GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' WITH GRANT OPTION;        //赋予权限 mysql> flush privileges;      //刷新权限

    SE_Zhang 2024-04-18
    29 0 0
  • 不停止MySQL服务增加从库的两种方式

    简介:  现在生产环境MySQL数据库是一主一从,由于业务量访问不断增大,故再增加一台从库。前提是不能影响线上业务使用,也就是说不能重启MySQL服务,为了避免出现其他情况,选择在网站访问量低峰期时间段操作。  一般在线增加从库有两种方式,一种是通过mysqldump备份主库,恢复到从库,mysqldump是逻辑备份,数据量大时,备份速度会很慢,锁表的时间也会很长。另一种是通过xtrabackup工具备份主库,恢复到从库,xtrabackup是物理备份,备份速度快,不锁表。为什么不锁表?因为自身会监控主库日志,如果有更新的数据,就会先写到一个文件中,然后再回归到备份文件中,从而保持数据一致性。 服务器信息: 主库:192.168.18.212(原有) 从库1:192.168.18.213(原有) 从库2:192.168.18.214(新增) 数据库版本:MySQL5.5 存储引擎:Innodb 测试库名:weibo 一、mysqldump方式 MySQL主从是基于binlog日志,所以在安装好数据库后就要开启binlog。这样好处是,一方面可以用binlog恢复数据库,另一方面可以为主从做准备。 原有主库配置参数如下: vi my.cnf server- id = 1 #id要唯一 log-bin = mysql-bin #开启binlog日志 auto-increment-increment = 1 #在Ubuntu系统中MySQL5.5以后已经默认是1 auto-increment-offset = 1 slave-skip-errors = all #跳过主从复制出现的错误 1. 主库创建同步账号   grant all on *.* to 'sync' @ '192.168.18.%' identified by 'sync' ; 2. 从库配置MySQL   vi my.cnf server- id = 3 #这个设置3 log-bin = mysql-bin #开启binlog日志 auto-increment-increment = 1 #这两个参数在Ubuntu系统中MySQL5.5以后都已经默认是1 auto-increment-offset = 1 slave-skip-errors = all #跳过……

    SE_Zhang 2024-04-17
    18 0 0
  • MySQL优化之show processlist命令详解

    SHOW PROCESSLIST 显示哪些线程正在运行 不在mysql提示符下使用时用mysql -uroot -e 'show  processlist' 或者mysqladmin processlist 如果您有root权限,您可以看到所有线程。否则,您只能看到登录的用户自己的线程,通常只会显示100条如果想看跟多的可以使用full修饰(show full processlist) 参数 id #ID标识,要kill一个语句的时候很有用 use #当前连接用户 host #显示这个连接从哪个ip的哪个端口上发出 db #数据库名 command #连接状态,一般是休眠(sleep),查询(query),连接(connect) time #连接持续时间,单位是秒 state #显示当前sql语句的状态 info #显示这个sql语句  其中state的状态十分关键,下表列出state主要状态和描述: 状态  描述 Checking table 正在检查数据表(这是自动的)。 Closing tables 正在将表中修改的数据刷新到磁盘中,同时正在关闭已经用完的表。这是一个很快的操作,如果不是这样的话,就应该确认磁盘空间是否已经满了或者磁盘是否正处于重负中。 Connect Out 复制从服务器正在连接主服务器。 Copying to tmp table on disk 由于临时结果集大于tmp_table_size,正在将临时表从内存存储转为磁盘存储以此节省内存。 Creating tmp table 正在创建临时表以存放部分查询结果。 deleting from main table 服务器正在执行多表删除中的第一部分,刚删除第一个表。 deleting from reference tables 服务器正在执行多表删除中的第二部分,正在删除其他表的记录。 Flushing tables 正在执行FLUSH TABLES,等待其他线程关闭数据表。 Killed 发送了一个kill请求给某线程,那么这个线程将会检查kill标志位,同时会放弃下一个kill请求。MySQL……

    SE_Zhang 2024-04-16
    12 0 0
  • MYSQL解锁与锁表

    MySQL锁概述 相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制。比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level locking);BDB存储引擎采用的是页面锁(page-level locking),但也支持表级锁;InnoDB存储引擎既支持行级锁(row-level locking),也支持表级锁,但默认情况下是采用行级锁。 MySQL这3种锁的特性可大致归纳如下 开销、加锁速度、死锁、粒度、并发性能 表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低。 行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高。 页面锁:开销和加锁时间界于表锁和行锁之间;会出现死锁;锁定粒度界于表锁和行锁之间,并发度一般。 MyISAM表锁 MyISAM存储引擎只支持表锁,这也是MySQL开始几个版本中唯一支持的锁类型。随着应用对事务完整性和并发性要求的不断提高,MySQL才开始开发基于事务的存储引擎,后来慢慢出现了支持页锁的BDB存储引擎和支持行锁的InnoDB存储引擎(实际 InnoDB是单独的一个公司,现在已经被Oracle公司收购)。但是MyISAM的表锁依然是使用最为广泛的锁类型。本节将详细介绍MyISAM表锁的使用。 查询表级锁争用情况 可以通过检查table_locks_waited和table_locks_immediate状态变量来分析系统上的表锁定争夺: mysql> show status like 'table%'; +-------------------------------+-------+ | Variable_name      | Value | +-------------------------------+-------+ | Table_locks_immediate | 2979 | | Table_locks_waited     | 0   | +-------------------------------+-------+ 2 rows in set (0.00 sec)) 如果Table_locks_waited的值比较高,则说明存在着较严重的表级……

    SE_Zhang 2024-04-15
    13 0 0
  • mysql锁表查询和解锁操作

    mysql锁表查询和解锁操作 1、在做数据库操作时,有时会因为自己的粗心或者程序设计上的缺陷导致锁表,在mysql中查看锁表和解锁的步骤如下: //1.查看当前数据库锁表的情况 SELECT * FROM information_schema.INNODB_TRX; //2.杀掉查询结果中锁表的trx_mysql_thread_id kill trx_mysql_thread_id 2、另外一种查询锁方法 1、查询是否锁表 show OPEN TABLES where In_use > 0; 2、查询进程 show processlist 查询到相对应的进程===然后 kill id 补充: 查看正在锁的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCKS; 查看等待锁的事务 SELECT * FROM INFORMATION_SCHEMA.INNODB_LOCK_WAITS;  

    SE_Zhang 2024-04-12
    23 0 0
  • MySQL中drop、truncate和delete的区别

    1.前言 对于drop、truncate和delete,虽然简单,但是真要使用或者面试时候问到还是需要有一定的总结,今天来简单讲讲他们直接的区别。在此之前先简单了解下什么是DDL和DML。 DDL(数据定义语言,Data Definition Language):DDL代表数据定义语言,是一种有助于创建数据库模式的SQL命令。DDL中常用的命令有:create,drop,alter,truncate和rename等等。 DML(数据操作语言,Data Manipulation Language):DML代表数据操作语言,是一种有助于检索和管理关系数据库中数据的SQL命令。DML中常用的命令有:insert,update,delete和select等等。 2.drop DROP命令用于删除整个表(结构和数据),或数据库等对象,特点如下: 彻底删除:DROP命令不仅删除表内的所有数据,还删除了表的结构定义。这个过程是不可逆的,除非有备份可以恢复。 释放资源:执行DROP命令后,与该表相关的数据库资源会被释放。 非事务性操作:DROP操作通常不能回滚,执行DROP命令后,相关对象就被立即删除。 自增ID:如果创建新表,自增ID会重新开始计数。 代码示例: DROP TABLE employees; 注意:DROP语句执行后立即生效,无法找回。 3.truncate TRUNCATE命令用于删除表中的所有行,其特点如下: 快速清空表:TRUNCATE比使用DELETE删除表中的所有行要快得多,因为它不逐行删除数据,而是通过释放存储这些数据的数据页来删除数据并重新初始化表。 非事务性操作:尽管某些数据库管理系统可能允许TRUNCATE操作在事务中回滚,但在很多情况下,TRUNCATE并不记录详细的日志,因此不能像DELETE操作那样保证事务安全。 不触发触发器:通常,执行TRUNCATE操作不会触发表的触发器。 自动重置自增ID:对于有自增主键的表,TRUNCATE会重置自增计数器。 truncate会删除表中所有记录,并且将重新设置高水线和所有的索引。 就是truncate会删除表中的所有行,但……

    SE_Zhang 2024-04-11
    21 0 0
  • mysql 查看表数据大小条数

    mysql的information_schema库重 tables存储了数据表的元数据信息,下面是其中几个字段的含义: table_schema: 记录数据库名; table_name: 记录数据表名; table_rows: 关于表的粗略行估计; data_length : 记录表的大小(单位字节); index_length : 记录表的索引的大小; 要查看表的大小,条数,可以查data_length,table_rows select TABLE_NAME, concat(truncate(data_length/1024/1024,2),' MB') as data_size,table_rows from information_schema.tables where TABLE_SCHEMA = 'dbName' and TABLE_NAME in ("tableName1","tableName2")  

    SE_Zhang 2024-04-11
    12 0 0