Mysql的基本知识

mysql install

安装

   从官网上下载可用的文件(此处选择了压缩包的安装方式,还支持安装包形式,版本为5.7.11)

     1、解压缩
     2、修改配置文件my.default.ini 为my.ini,配置dirbase,database等参数(详细配置具体分析)
     3、cd %mysql_home%\bin
     4、mysqld --initialize (确保创建了一个%database%目录,并且里面没有数据)  如果失败了就删掉里面的数据、文件,重新initialize一次
     5、mysqld -install
     6、net start mysql

     7、mysql -u root -p%password% (password见database目录下的日志文件,由系统随机生成)

 参考:http://wenku.baidu.com/link?url=l5hCRXOSCII5F140gyniLDZmPT8Y13ilE-agfnnEXFZWqb-fZ7IrHQRkKmdAnhdcRfhZA6Vj8T7XM81aEAvvCr9VaeKNjbaP_mg7CjIDHe

基本操作的命令

        用户的添加、授权、删除操作:http://www.cnblogs.com/wanghetao/p/3806888.html

配置文件

      mysql 常见配置项,(记得配置备份日志binlog,以免不小心删除了数据导致无法回滚的问题)

      参考:http://blog.csdn.net/magic_zj00/article/details/7408500

       某些对优化效果比较明显的配置项http://jingyan.baidu.com/article/b7001fe172f39b0e7382dd5c.html

       某DBA生产环境my.ini标配 : http://blog.itpub.net/22664653/viewspace-1983007/

主从复制配置

          mysql 主从复制配置 :http://blog.csdn.net/goustzhu/article/details/9339621

          授权问题 :http://www.cnblogs.com/shyy/archive/2012/03/30/2453034.html

          数据日志不同步问题,原因主库与slave库中的表不同步,导致主库对表的操作无法同步到从库。(所以同步之前,即在start slave之前,必须保证从库对于slave的  

           MASTER_LOG_FILE & MASTER_LOG_POS 配置正确 )http://www.111cn.net/database/mysql/79902.htm

mysql集群搭建

          MySQL集群搭建详解(三种结点分离)   http://blog.csdn.net/yang1982_0907/article/details/20716845

          实战体验几种MySQLCluster方案  http://www.2cto.com/database/201504/387166.html

     通过中间件的方式实现分表分库、负载均衡

                  多种中间件技术比较分析:http://www.guokr.com/blog/475765/

                 阿里mysql某开发博客:http://www.gpfeng.com/?p=657

                 heisenberg :https://github.com/brucexx

                 youtube github地址https://github.com/youtube/vitess

                  阿里中间件blog:http://jm.taobao.org/tag/diamond%E4%B8%93%E9%A2%98/

数据库优化

           优化数据库schema、索引、配置、硬件等,详见:《高性能mysql》http://vdisk.weibo.com/s/aJAYTQ7kEAsS

带着目标去看书、实践

 目标
1、在mysql中建立大量数据,数据量在千万级别以上,了解在这个级别的数据量时,对于数据库的crud操作是怎样的情况。
2、然后尽可能尝试优化:sql层面的分析,sql优化、索引优化 (此时《高性能mysql》就可以作为参考书来看)
3、分库、分表实践
4、主从库复制、更新策略
5、总结回顾(blog)


mysql命令行参数

    Usage: mysql [OPTIONS] [database]   //命令方式  
     -?, --help          //显示帮助信息并退出  
     -I, --help          //显示帮助信息并退出  
     --auto-rehash       //自动补全功能,就像linux里面,按Tab键出提示差不多,下面有例子  
      
     -A, --no-auto-rehash  //默认状态是没有自动补全功能的。-A就是不要自动补全功能  
     -B, --batch         //ysql不使用历史文件,禁用交互  
     (Enables --silent)  
     --character-sets-dir=name   //字体集的安装目录                      
     --default-character-set=name    //设置数据库的默认字符集  
     -C, --compress      //在客户端和服务器端传递信息时使用压缩  
     -#, --debug[=#]     //bug调用功能  
     -D, --database=name //使用哪个数据库  
     --delimiter=name    //mysql默认命令结束符是分号,下面有例子  
     -e, --execute=name  //执行mysql的sql语句  
     -E, --vertical      //垂直打印查询输出  
     -f, --force         //如果有错误跳过去,继续执行下面的  
     -G, --named-commands  
     /*Enable named commands. Named commands mean this program's 
     internal commands; see mysql> help . When enabled, the 
     named commands can be used from any line of the query, 
     otherwise only from the first line, before an enter. 
     Disable with --disable-named-commands. This option is 
     disabled by default.*/  
     -g, --no-named-commands  
     /*Named commands are disabled. Use \* form only, or use 
     named commands only in the beginning of a line ending 
     with a semicolon (;) Since version 10.9 the client now 
     starts with this option ENABLED by default! Disable with 
     '-G'. Long format commands still work from the first 
     line. WARNING: option deprecated; use 
     --disable-named-commands instead.*/  
     -i, --ignore-spaces //忽视函数名后面的空格.  
     --local-infile      //启动/禁用 LOAD DATA LOCAL INFILE.  
     -b, --no-beep       //sql错误时,禁止嘟的一声  
     -h, --host=name     //设置连接的服务器名或者Ip  
     -H, --html          //以html的方式输出  
     -X, --xml           //以xml的方式输出  
     --line-numbers      //显示错误的行号  
     -L, --skip-line-numbers  //忽略错误的行号  
     -n, --unbuffered    //每执行一次sql后,刷新缓存  
     --column-names      //查寻时显示列信息,默认是加上的  
     -N, --skip-column-names  //不显示列信息  
     -O, --set-variable=name  //设置变量用法是--set-variable=var_name=var_value  
     --sigint-ignore     //忽视SIGINT符号(登录退出时Control-C的结果)  
     -o, --one-database  //忽视除了为命令行中命名的默认数据库的语句。可以帮跳过日志中的其它数据库的更新。  
     --pager[=name]      //使用分页器来显示查询输出,这个要在linux可以用more,less等。  
     --no-pager          //不使用分页器来显示查询输出。  
     -p, --password[=name] //输入密码  
     -P, --port=#        //设置端口  
     --prompt=name       //设置mysql提示符  
     --protocol=name     //使用什么协议  
     -q, --quick         //不缓存查询的结果,顺序打印每一行。如果输出被挂起,服务器会慢下来,mysql不使用历史文件。  
     -r, --raw           //写列的值而不转义转换。通常结合--batch选项使用。  
     --reconnect         //如果与服务器之间的连接断开,自动尝试重新连接。禁止重新连接,使用--disable-reconnect。  
     -s, --silent        //一行一行输出,中间有tab分隔  
     -S, --socket=name   //连接服务器的sockey文件  
     --ssl               //激活ssl连接,不激活--skip-ssl  
     --ssl-ca=name       //CA证书  
     --ssl-capath=name   //CA路径  
     --ssl-cert=name     //X509 证书  
     --ssl-cipher=name   //SSL cipher to use (implies --ssl).  
     --ssl-key=name      //X509 密钥名  
     --ssl-verify-server-cert //连接时审核服务器的证书  
     -t, --table         //以表格的形势输出  
     --tee=name          //将输出拷贝添加到给定的文件中,禁时用--disable-tee  
     --no-tee            //根--disable-tee功能一样  
     -u, --user=name     //用户名  
     -U, --safe-updates  //Only allow UPDATE and DELETE that uses keys.  
     -U, --i-am-a-dummy  //Synonym for option --safe-updates, -U.  
     -v, --verbose       //输出mysql执行的语句  
     -V, --version       //版本信息  
     -w, --wait          //服务器down后,等待到重起的时间  
     --connect_timeout=# //连接前要等待的时间  
     --max_allowed_packet=# //服务器接收/发送包的最大长度  
     --net_buffer_length=# //TCP / IP和套接字通信缓冲区大小。  
     --select_limit=#    //使用--safe-updates时SELECT语句的自动限制  
     --max_join_size=#   //使用--safe-updates时联接中的行的自动限制  
     --secure-auth       //拒绝用(pre-4.1.1)的方式连接到数据库  
     --server-arg=name   //Send embedded server this as a parameter.  
     --show-warnings     //显示警告  

http://blog.51yip.com/mysql/1056.html

脚本删除binlog

参考 :http://blog.itpub.net/22664653/viewspace-2064931/


mysql开发

一些开发约束

...

17)sql语句尽可能简单

    一条sql只能在一个cpu运算;
    大语句拆小语句,减少锁时间;
    一条大sql可以堵死整个库;
(18)简单的事务
    事务时间尽可能短;
    bad case:
    上传图片事务
(19)避免使用trig/func
    触发器、函数不用;
    客户端程序取而代之;
(20)不用select *
    消耗cpu,io,内存,带宽;
    这种程序不具有扩展性;
(21)OR改写为IN()
    or的效率是n级别;
    in的消息时log(n)级别;
    in的个数建议控制在200以内;
      select id from t where phone=’159′ or phone=’136′;
      =>
      select id from t where phone in (’159′, ’136′);
(22)OR改写为UNION
    mysql的索引合并很弱智
     select id from t where phone = ’159′ or name = ‘john’;
     =>
     select id from t where phone=’159′
     union
     select id from t where name=’jonh’
(23)避免负向%
(24)慎用count(*)
(25)同上
(26)limit高效分页
    limit越大,效率越低
    select id from t limit 10000, 10;
    =>
    select id from t where id > 10000 limit 10;
(27)使用union all替代union (union有去重开销)
(28)少用连接join
(29)使用group by (分组; 自动排序;)
(30)请使用同类型比较
(31)使用load data导数据 (load data比insert快约20倍)
(32)打散批量更新
(33)新能分析工具
    show profile;
    mysqlsla;
    mysqldumpslow;
    explain;
    show slow log;
    show processlist;
    show query_response_time(percona);

参考 :http://blog.itpub.net/22664653/viewspace-723506/

部分约束出现于《高性能mysql》

你可能感兴趣的:(Mysql的基本知识)