4-19
Saturday
标签
梦涛笔记

MySQL配置优化参数

MySQL 发布时间:2025-03-19 18:31:54
vim /etc/my.cnf
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/5.7/en/server-configuration-defaults.html

[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
#
# 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

datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
event_scheduler=1
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER
max_connections=1000

skip_name_resolve

innodb_buffer_pool_size = 32000M
innodb_log_file_size = 2048M

query_cache_type=0
query_cache_size=0
query_cache_limit=1M

server-id = 112031
master-info-repository = table
relay-log-info-repository = table
relay-log-recovery=1

log-bin = mysql-bin
expire_logs_days = 7
binlog_format = mixed
#binlog-ignore-db = mysql
binlog-ignore-db = sys
binlog-ignore-db = phpmyadmin
binlog-ignore-db = information_schema
binlog-ignore-db = performance_schema

log-slave-updates
#replicate-ignore-db = mysql
#
slave-skip-errors=all

slow_query_log = 1
long_query_time = 2
#log_output = table


如何在mysql存储过程中处理select语句返回的多行结果(用游标)

MySQL 发布时间:2025-03-18 10:10:47
CREATE PROCEDURE curdemo()
BEGIN
  DECLARE done INT DEFAULT 0;
  DECLARE a CHAR(16);
  DECLARE b,c INT;
  DECLARE cur1 CURSOR FOR SELECT id,data FROM test.t1;
  DECLARE cur2 CURSOR FOR SELECT i FROM test.t2;
  DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;
  
  OPEN cur1;
  OPEN cur2;
  
  REPEAT
    FETCH cur1 INTO a, b;
    FETCH cur2 INTO c;
    IF NOT done THEN
       IF b < c THEN
          INSERT INTO test.t3 VALUES (a,b);
       ELSE
          INSERT INTO test.t3 VALUES (a,c);
       END IF;
    END IF;
  UNTIL done END REPEAT;
  
  CLOSE cur1;
  CLOSE cur2;
END


mysql 实现按相似度来排序

MySQL 发布时间:2025-03-14 13:42:14

select *from (select *, case when words like ‘%dog%’ then 1
when words like ‘%og%’ then 2
when words like ‘%g%’ then 3
when words like ‘%o%’ then 4 end as rn
from test
where words like ‘%dog%’ or words like ‘%og%’ or words like ‘%g%’ or words like ‘%o%’ ) as k
order by rn;

mysql中的 skip-name-resolve 问题

MySQL 发布时间:2025-03-14 13:38:31

今天早上开发那边发现mysql连接很慢,登陆到服务器上查看服务器日志都是正常的,无可疑记录,刚刚还好好的,怎么突然出现这个问题,于是登陆到mysql服务器上,查看下进程,发现有很多这样的连接:
218 | unauthenticated user | 192.168.10.6:44500 | NULL  | Connect | NULL | login | NULL
219 | unauthenticated user | 192.168.10.6:44501 | NULL  | Connect | NULL | login | NULL  
……..

原因是由于mysql对连接的客户端进行DNS反向解析。
有2种解决办法:

1,把client的ip写在mysql服务器的/etc/hosts文件里,随便给个名字就可以了。
2,在 my.cnf 中加入 –skip-name-resolve 。

对于第一种方法比较笨,也不实用,那么 skip-name-resolve 选项可以禁用dns解析,但是,这样不能在mysql的授权表中使用主机名了,只能使用IP。
我理解mysql是这样来处理客户端解析过程的,
1,当mysql的client连过来的时候,服务器会主动去查client的域名。
2,首先查找 /etc/hosts 文件,搜索域名和IP的对应关系。
3,如果hosts文件没有,则查找DNS设置,如果没有设置DNS服务器,会立刻返回失败,就相当于mysql设置了skip-name-resolve参数,如果设置了DNS服务器,就进行反向解析,直到timeout。
有一点不明白,为什么连接mysql服务器内网的ip地址也要进行DNS反向解析,而这时候DNS解析返回给mysql的是什么呢?
望高手解答。

mysql root用户远程登录命令

MySQL 发布时间:2025-03-13 19:43:34

在安装mysql的机器上运行:

1、# mysql -h localhost -u root
//这样应该可以进入MySQL服务器2、CREATE USER 'root'@'%' IDENTIFIED BY 'password';//创建用户
3、mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
//赋予任何主机访问数据的权限
4、mysql>FLUSH PRIVILEGES;
//修改生效
5、mysql>EXIT

//退出MySQL服务器
这样就可以在其它任何的主机上以root身份登录啦。


centos6.5使用yum安装mysql5.6

CentOS MySQL 发布时间:2025-03-13 19:36:42

需要先导入一个repo的包。

 yum install http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm

下面是再具体的步骤,很简单。。。。

 yum install mysql mysql-devel mysql-server mysql-utilities


MySQL备份方法:mysqldump命令详解

MySQL 发布时间:2025-04-12 08:56:33

MYSQL备份命令:

mysqldump -h hostname -uroot -ppasswd database > /home/db_bk/database$(date -d "today" +"%Y%m%d").sql

可以自动生成当天日期的文件名备份文件。

还原导入数据库常用source命令

mysql -uroot -p       //进入数据库控制台
mysql> use database
mysql>source /home/db_bk/database.sql

命令参数详解:

--master-data
  --master-data=1  (输出中会带change master 便于从库搭建)
  --master-data=2  (输出中会带注释change master便于从库搭建)
--events 或 -E  导出事件
--routines 或 -R 导出存储过程和函数
--triggers  导出触发器,默认是导出所以一般不用加
--no-data 或 -d  只导出数据库结构
--no-create-info  不导出表的 CREATE TABLE 语句,只导出数据
--skip-lock-tables  备份时不锁表
--single-transaction  以得到一致性的导出结果。他是通过将导出行为放入一个事务中达到目的的
--ignore-table=table_name  忽略某个表
database table  库名后跟表名则只备份某个表

centos7 install 安装mysql

CentOS MySQL 发布时间:2025-03-13 19:16:51

CentOS 7的yum源中貌似没有正常安装mysql时的mysql-sever文件,需要去官网上下载


# wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm
# rpm -ivh mysql-community-release-el7-5.noarch.rpm
# yum install mysql-community-server

成功安装之后重启mysql服务

# systemctl restart mysqld

初次安装mysql是root账户是没有密码的


设置密码的方法


# mysql -uroot
mysql> setpassword for‘root’@‘localhost’ = password('mypasswd');
mysql> exit


MySQL中导出用户权限设置的脚本

MySQL 发布时间:2025-03-13 15:35:47

该脚本可以将所有授权数据到当前目录下的sql脚本(grants.sql)中,使用grants.sql脚本刷到数据库中即可完成授权数据迁移(注意:这里导出的数据包含root用户的授权关系,而且导入之后会把目前已有的数据覆盖掉,请确认需要覆盖再进行导入!!):

#!/bin/bash    
#Function export user privileges    

pwd=root123
host=localhost
expgrants()    
{  
  mysql -B -h${host} -u'root' -p${pwd} -N $@ -e "SELECT CONCAT('SHOW GRANTS FOR ''', user, '''@''', host, ''';') AS query FROM mysql.user" | mysql -h${host} -u'root' -p${pwd} $@ | sed 's/\(GRANT .*\)/\1;/;s/^\(Grants for .*\)/-- \1 /;/--/{x;p;x;}'  
}  
expgrants > ./grants.sql 

注意:上述代码中,需要根据实际情况(mysql的root用户的密码)替换pwd的值。将上述代码拷贝后,新建并贴到shell脚本(如exp_grants.sh)中执行该脚本即可完成数据库用户授权导出。