mysql优化之日志配置

如果你选mysql数据库作为数据持久化的工具,那么就需要一个合理的日志配置,这样有助于排错和数据备份及恢复! 首先我们可以通过下面的MySQL的sql查询正在运行中的日志配置。 刚好我们熟悉一下SHOW VARIABLES LIKE的用法!这个命令是用来查询MySQL运行时配置的语句,LIKE后面的可以接通配符查找! 还有对应的设置语法叫SET GLOBAL,后面我们会用到。 mysql> SHOW VARIABLES LIKE '%log%'; +-----------------------------------------+---------------------------------+ | Variable_name | Value | +-----------------------------------------+---------------------------------+ | back_log | 50 | | binlog_cache_size | 32768 | | binlog_direct_non_transactional_updates | OFF | | binlog_format | STATEMENT | | expire_logs_days | 0 | | general_log | OFF | | general_log_file | /var/run/mysqld/mysqld.log | | innodb_flush_log_at_trx_commit | 1 | | innodb_locks_unsafe_for_binlog | OFF | | innodb_log_buffer_size | 1048576 | | innodb_log_file_size | 5242880 | | innodb_log_files_in_group | 2 | | innodb_log_group_home_dir | ....

May 14, 2015 · 2 min · Me

centos6新系统初始化脚本

最近装机次数有点多,本来想写到这里的centos6 优化脚本与安全脚本,结果一想还是新开一个帖子吧。 centos源设置可以参考Centos源设置,老高推荐安装阿里源。 新机子先运行上面的脚本,再运行这个脚本 ...

April 27, 2015 · 2 min · Me

mysql中localhost和127.0.0.1的区别

mysql的默认的root用户会有很多行,自习观察后你就会发现每行的用户名或密码可能相同,但是host一定不同,host是登陆用户的主机名,也就是说,‘localhost’,‘127.0.0.1’,‘phpgao.local’,'%‘都算不同的用户! 理解了这一点后,那么我的问题就附上水面了! 有些TX经常会遇到这个问题: 使用PHP连接mysql数据库,使用localhost作为主机名总是连接失败,但是使用'127.0.0.1’就可以顺利连接,这到底是为什么? mysql中HOST为localhost和127.0.0.1到底有什么区别? 经过一番搜索,老高总结如下: 使用到的命令 mysql>status; mysql>show grants; 类Unix系统下,如果不使用-h指定主机名或者使用了localhost,那么会使用unix domain socket与mysql服务器沟通,比TCP/IP快一些!所以你想使用TCP/IP协议,请将host指定为'127.0.0.1’。 PHP连接mysql如果使用’localhost’发生问题,首先可以明确的是PHP会试着使用unix domain socket与服务器连接,所以请检查php.ini中mysql.default_socket = /var/mysql/mysql.sock是否配置正确。 如果想要明确连接方式,可以再配置文件中显式声明 protocol=tcp 在mysql的官方文档中解释道:如果mysql在win上跑,如果系统开启了–enable-named-pipe,然后访问服务器的时候没有指定hostname,那么mysql客户端会以pipe为优先连接,如果连接失败,那么再会去尝试使用TCP/IP去连接。你可以指定hostname为.在win下强制使用pipes。 If the MySQL server is running on Windows, you can connect using TCP/IP. If the server is started with the –enable-named-pipe option, you can also connect with named pipes if you run the client on the host where the server is running....

January 19, 2015 · 1 min · Me

VPS重做系统都需要做什么

重做系统都快成日常了,看来还是需要整理一下。 ...

December 25, 2014 · 2 min · Me

mysql开发常用SQL

主键 -- 为当前表添加主键 ALTER TABLE `tablename` ADD COLUMN id TINYINT UNSIGNED NOT NULL AUTO_INCREMENT, ADD PRIMARY KEY (id); -- 删除主键 ALTER TABLE `tablename` DROP PRIMARY KEY; 创建数据库 # utf8mb4_unicode_ci更准 CREATE DATABASE IF NOT EXISTS typecho DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_unicode_ci; # utf8mb4_general_ci更快 CREATE DATABASE IF NOT EXISTS typecho DEFAULT CHARSET utf8mb4 COLLATE utf8mb4_general_ci; CREATE DATABASE typecho DEFAULT CHARACTER SET gbk COLLATE gbk_chinese_ci; 创建用户并提供相应权限 # 只是创建用户 CREATE USER phpergao@'localhost' IDENTIFIED BY 'yourpasswd'; # 赋予权限 GRANT select,update on phpergao....

December 9, 2014 · 2 min · Me

MySQL主从复制操作步骤

主服务器(master)IP:192.168.0.1 从服务器(slave)IP:192.168.0.2 首先确保主从服务器上的Mysql版本相同 主服务器上操作 创建用户名为repl的一个账户 GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.0.2' IDENTIFIED BY 'xxxxxxxxx'; 修改主数据库的配置文件my.cnf,开启BINLOG,并设置server-id的值,修改之后必须重启Mysql服务,如果不需要修改可不用重启。 server-id=1 log_bin = /usr/llocal/mysql/log/mysql-bin.log 之后可以得到主服务器当前二进制日志名和偏移量,这个操作的目的是为了在从数据库启动后,从这个点开始进行数据的恢复 flush tables with read lock; 这是session级,退出就隐式 unlock tables; show master status; 生成主数据库的备份 如果mysqldump 无法识别,则在/home/mysql/.bash_profile 添加环境变量 export PATH=$PATH:/usr/local/mysql/bin mysqldump -p3306 -uroot –pxxxxxxxx test > test.sql unlock tables; 将备份出来的数据复制到从数据库 Scp test.sql 192.168.0.2: 从服务器上操作 将备份数据导入数据库 Mysql –uroot –pxxxxxxxx test < test.sql 修改从数据库的my.cnf,增加server-id参数,如有更改需要重启 server-id=2 # 注:一定不能跟主数据库一样 指定复制使用的用户,主数据库服务器的ip,端口以及开始执行复制日志的文件和位置 CHANGE MASTER TO MASTER_HOST='192.168.1.130', MASTER_USER='repl', MASTER_PASSWORD='456123', MASTER_LOG_FILE='mysql-bin....

December 4, 2014 · 1 min · Me

mysql的多表删除

mysql默认是禁用多表删除语句的,之前的做法都是先把条件缓存,然后逐条执行 delete from a where a.xxx in (123123,123123); delete from b where b.xxxx in (123123,123123); 如果写成下面这种绝对是错误的! delete * from a,b where xxxx in ... 今天突然发现原来mysql也是可以一条sql删除多表数据的,下面来分析一下 多表删除其实思路还是比较简单的,首先条件就是多个表(一般就两个表,织梦的文章信息存在3个表里,删除起来很麻烦)有关联 其次,删除条件一般都是由关联的这一行组成的,也可能不是,没有关系,我们先写一个试试: DELETE p.*, pp.* FROM pw_threads p, pw_tmsgs pp WHERE p.tid = pp.tid AND p.tid in(SELECT tid FROM pw_threads WHERE postdate>UNIX_TIMESTAMP('2014-06-12 00:00:00') and fid=136) 逻辑都通着,但是会报错 You can’t specify target table ‘A’ for update in FROM clause 原因是: In general, you cannot modify a table and select from the same table in a subquery....

June 12, 2014 · 1 min · Me

数据库持久连接

搜PHP长链接把这个搜出来了,2006年的帖子比较久远了,希望对你有帮助! 转自http://bbs.phpchina.com/forum.php?mod=viewthread&tid=4577&page=1 中forest的回帖: 永久的数据库连接是指在脚本结束运行时不关闭的连接。当收到一个永久连接的请求时。PHP 将检查是否已经存在一个(前面已经开启的)相同的永久连接。如果存在,将直接使用这个连接;如果不存在,则建立一个新的连接。所谓“相同”的连接是指用相同的用户名和密码到相同主机的连接。 对 web 服务器的工作和分布负载没有完全理解的读者可能会错误地理解永久连接的作用。特别的,永久连接不会在相同的连接上提供建立“用户会话”的能力,也不提供有效建立事务的能力。实际上,从严格意义上来讲,永久连接不会提供任何非永久连接无法提供的特殊功能。 为什么? 这和 web 服务器工作的方式有关。web 服务器可以用三种方法来利用 PHP 生成 web 页面。 第一种方法是将 PHP 用作一个“外壳”。以这种方法运行,PHP 会为向 web 服务器提出的每个 PHP 页面请求生成并结束一个 PHP 解释器线程。由于该线程会随每个请求的结束而结束,因此任何在这个线程中利用的任何资源(例如指向 SQL 数据库服务器的连接)都会随线程的结束而关闭。在这种情况下,使用永久连接不会获得任何地改变――因为它们根本不是永久的。 第二,也是最常用的方法,是把 PHP 用作多进程 web 服务器的一个模块,这种方法目前只适用于 Apache。对于一个多进程的服务器,其典型特征是有一个父进程和一组子进程协调运行,其中实际生成 web 页面的是子进程。每当客户端向父进程提出请求时,该请求会被传递给还没有被其它的客户端请求占用的子进程。这也就是说当相同的客户端第二次向服务端提出请求时,它将有可能被一个不同的子进程来处理。在开启了一个永久连接后,所有请求 SQL 服务的后继页面都能够重新使用这个已经建立的 SQL Server 连接。 最后一种方法是将 PHP 用作多线程 web 服务器的一个插件。目前 PHP 4 已经支持 ISAPI、WSAPI 和 NSAPI(在 Windows 环境下),这些使得 PHP 可以被用作诸如 Netscape FastTrack (iPlanet)、Microsoft’s Internet Information Server (IIS) 和 O’Reilly’s WebSite Pro 等多线程 web 服务器的插件。永久连接的行为和前面所描述的多过程模型在本质上是相同的。注意 PHP 3 不支持 SAPI。...

May 16, 2014 · 1 min · Me

mysql忘记root密码解决方法

Windows 步骤如下: 1.停止mysql服务(以管理员身份,在cmd命令行下运行) net stop mysql 2.使用 mysqld –skip-grant-tables 命令启动mysql数据库 >D:\>net stop mysql MySQL 服务正在停止. MySQL 服务已成功停止。 D:\>mysqld --skip-grant-tables</pre> 3.新开一个cmd窗口,进行如下操作 D:\>mysql -uroot Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 1 Server version: 5.1.26-rc-community MySQL Community Server (GPL) Type 'help;' or '\h' for help. Type '\c' to clear the buffer. mysql> update mysql.user set password=password('root') where user='root'; Query OK, 1 row affected (0....

May 10, 2014 · 1 min · Me