Mysql体系结构:
连接池组件、管理服务和工具组件、sql接口组件、查询分析组件、优化器组件、缓冲组件、插件式存储引擎、物理文件。

Mysql导出和导入相关:
导出某个数据库:
# mysqldump -uroot -p123456 book > /opt/boo2.sql
或: mysqldump -uroot -p book > /opt/boo2.sql  —-回车后输入密码即可

导出所有库:
# mysqldump -u root -p123456 -A > all1.sql

导入到某个数据库:
# mysql -uroot -p123456 book < /opt/book.sql
或:mysql -uroot -p book < /opt/book.sql   —- 回车后输入密码即可

导入所有库:
# mysql -uroot -p123456  <  all.sql

导出表结构(不含数据):
# mysqldump -uroot -p -d dbname > dbname.sql

导出函数和存储过程(不含数据):
# mysqldump -uroot -p -R -ntd dbname > dbname-hanshu.sql

查看存储过程:
mysql> show procedure status;

查看函数:
mysql> show function status;

更改结束符(一般用于创建存储过程):
mysql> delimiter $;

将查询的结果导出:
mysql> select * from teble_aaa into outfile ‘table_aaa.txt’;

登陆多实例中的某个mysql:
# mysql -uroot -P3306 -S /usr/local/mysql/data/3306/mysql.sock -p

mysqldump扩展参数:
# mysqldump -uroot -p123456 –quick –no-create-info –extended-insert –default-character-set=latin1 lyp > lyp.sql
参数说明:
–quick:用于转储大的表,强制 mysqldump 从服务器一次一行的检索数据而不是检索所有行,并输出当前 cache 到内存中。
–no-create-info:不要创建 create table 语句。
–extended-insert:使用包括几个 values 列表的多行 insert 语法,这样文件更小,IO 也小,导入数据时会非常快。
–default-character-set=latin1:按照原有字符集导出数据,这样导出的文件中,所有中文都是可见的,不会保存成乱码

Mysql字符集相关:
常用字符集:
GBK        长度:2   说明:不是国际标准
UTF-8     长度:3   说明:中英文混合环境,国际标准
latin1      长度:1   说明:Mysql默认字符集
utf8mb4 长度:4   说明:UTF-8 Unicode

mysql> show global variables like ‘%char%’;   #查看RDS实例字符集相关参数设置
mysql> show global variables like ‘coll%’;    #查看当前会话字符序相关参数设置
mysql> show character set;                    #查看实例支持的字符集
mysql> show collation;                        #查看实例支持的字符序
mysql> show create table table_name;          #查看表字符集设置
mysql> show create database database_name;    #查看数据库字符集设置
mysql> show create procedure procedure_name;  #查看存储过程字符集设置
mysql> show procedure status \G               #查看存储过程字符集设置
mysql> alter database db_name default charset utf8;  #修改数据库的字符集
mysql> create database db_name character set utf8;   #创建数据库时指定字符集
mysql> alter table tab_name default charset utf8 collate utf8_general_ci;   #修改表字符集和字符序

使用 sql 语句修改数据库字符集:
修改库:
mysql> alter database dbsdq character set utf8mb4 collate utf8mb4_unicode_ci;
修改表:
mysql> use dbsdq;
mysql> alter table tt2 convert to character set utf8mb4 collate utf8mb4_unicode_ci;
修改一列:
mysql> alter table tt2 modify c2  varchar(10) character set utf8mb4;

设置mysql默认字符集为utf8:
在[client] 后添加如下代码:
default-character-set=utf8
在 [mysqld] 后添加如下代码:
character_set_server=utf8

Mysql查看参数信息相关:
查看用户lyp的权限:
mysql> show grants for lyp@’%’;

查看表结构:
mysql> show columns from 表名;

查看是否有锁表:
mysql> show OPEN TABLES where In_use > 0;

查看正在锁的事务:
mysql> select * from INFORMATION_SCHEMA.INNODB_LOCKS;
查看等待锁的事务:
mysql> select * from INFORMATION_SCHEMA.INNODB_LOCK_WAITS;

查看binlog_format格式:
mysql> show variables like ‘binlog_format’;

修改 binlog_format格式:
mysql> set global binlog_format=mixed;

创建索引:
mysql> create index idx_name on t3(name);

查看系统状态:
mysql> show status; 

显示 InnoDB 存储引擎的状态
mysql> show innodb status \G  

看变量(在 my.cnf 配置文件里定义的变量配置)
mysql> show variables;

查看警告信息:
mysql> show warnings;

查看错误信息:
mysql> show errors;

显示系统正在运行的进程:
mysql> show processlist ; 

显示查询缓存:
mysql> show status like ‘qcache%’;

整理缓存中的碎片(结果中的‘Qcache_free_blocks’较大):
mysql> flush query cache;

删除binlog日志:
mysql> purge master logs to ‘mysql-bin.000100’; #000100之前的全都删掉

Mysql内存分配:
查看Mysql的共享内存分配:
mysql> show variables where variable_name in (‘innodb_buffer_pool_size’,’innodb_log_buffer_size’,’innodb_additional_mem_pool_size’,’key_buffer_size’,’query_cache_size’);

查看Mysql的session私有内存分配:
mysql> show variables where variable_name in (‘read_buffer_size’,’read_rnd_buffer_size’,’sort_buffer_size’,’join_buffer_size’,’binlog_cache_size’,’tmp_table_size’);

Mysql优化相关:
强制mysql资源限制:
# vim /etc/my.cnf
[mysqld]     
max_connections=500         #最大连接数
wait_timeout=10                  #最长等待时间
max_connect_errors = 100   #连接100次失败后被锁定
(如若被锁定,则执行:mysql> FLUSH HOSTS;)

配置启用表缓存:
# vim /etc/my.cnf
[mysqld]   
table_cache=23      #缓存23个表
(table_cache 的值在 2G 内存以下的机器中的值默认从 256 到 512个;对于有 1G 内存的机器,推荐值是 128-256。)

配置启用查询缓存:
# vim /etc/my.cnf
[mysqld]   #在这段中添加
query_cache_size = 32M

配置启用慢查询:
# vim /etc/my.cnf
[mysqld]
log-slow-queries=/var/lib/mysql/slow.log    #这个路径对 mysql 用户具有可写权限
long_query_time=5                         #查询超过 5 秒钟的语句记录下
log-queries-not-using-indexes       #没有使用索引的查询
这三个设置一起使用,可以记录执行时间超过 5 秒和没有使用索引的查询。
请注意有关log-queries-not-using-indexes 的警告。慢速查询日志都保存在/var/lib/mysql/slow.log。

慢查询日志分析mysqlsla:
# mysqlsla -lt slow aaa-slow.log > slow.log

Mysql修复工具:mysqlcheck
常用参数:
-c,–check(检查表)
-r,–repair(修复表)
-o,–optimize(优化表)
-u,–user=name(使用mysql中哪个用户进行操作)
-A,–all-databases(检查所有库)
使用语法:
检查表:# mysqlcheck -uroot -p123456 -c database_name table_name
修复表:# mysqlcheck -uroot -p123456 -r database_name table_name
修复制定的数据库:# mysqlcheck -uroot -p123456 -r –databases database_name
修复所有数据库:# mysqlcheck -uroot -p123456 -r –all-database
每天凌晨3点优化所有数据库:
0 3 * * * mysqlcheck -uroot -p123456 -r -o -A > /dev/null 2>&1

Mysql热备工具:mysqlhotcopy(只支持MyISAM引擎)
例,备份lyp库到/opt目录下(-u、-p后面都有空格):
# mysqlhotcopy -u root -p 123456 lyp /opt
例,备份lyp、lyp2库到/opt目录下:
# mysqlhotcopy -u root -p 123456 lyp lyp2 /opt
例,备份lyp库中的abc表到/opt目录下:
# mysqlhotcopy -u root -p 123456 lyp./abc/ /opt

SQL语句3个类别:
DDL(Data Definition Languages)语句:数据定义语言,这些语句定义了不同的数据段、数据库、表、列、索引等数据库对象的定义。常用的语句关键字主要包括 create、drop、alter等。
DML(Data Manipulation Language)语句:数据操纵语句,用于添加、删除、更新和查询数据库记录,并检查数据完整性,常用的语句关键字主要包括 insert、delete、udpate 和select 等。(增删改查)
DCL(Data Control Language)语句:数据控制语句,用于控制不同数据段直接的许可和访问级别的语句。这些语句定义了数据库、表、字段、用户的访问权限和安全级别。主要的语句关键字包括 grant、revoke等。

Mysql数据复制方式:
强同步:应用发起的更新在主实例执行完成后,会将日志同步传输到所有备库,当集群中的大多数节点收到并存储日志后,事务才完成提交。在此模式下,实例的复制方式会始终保持强同步,无论出现何种状况,都不会退化为异步。当实例数>=3时,才支持强同步,因此只有金融版的RDS实例才支持强同步。
半同步:应用发起的更新在主实例执行完成后,会将日志同步传输到所有备库,当集群中至少一个节点收到日志后,不需要等待节点执行日志内容,事务就算完成了提交。当备实例不可用或者主备实例间出现网络异常时,本同步会退化为异步。
异步:应用发起更新请求,即进行增加、删除、修改数据的操作时,主实例完成操作后会立即响应应用,同时主实例向备实例异步复制数据。在异步数据复制方式下,备实例不可用时不会影响主实例上的操作。

binlog日志三种格式:
STATEMENT:是基于sql语句级别的,执行的sql语句都会记录
ROW:是基于行级别的,将每一行的修改都记录到binlog里,但没有sql语句,也可同步存储过程和函数,日志较大
MIXED:是STATEMENT和ROW的中和,一般情况下使用statement,特殊情况下,比如与函数相关的操作会使用row

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注