1.Sql
1.1.1 插入insert的使用
1.insert ignore into
1.insert ignore into
当插入数据时,如出现错误时,如重复数据,将不返回错误,只以警告形式返回。所以使用ignore请确保语句本身没有问题,否则也会被忽略掉。例如:
INSERT IGNORE INTO books (name) VALUES ('MySQL Manual')
2.on duplicate key update
当primary或者unique重复时,则执行update语句,如update后为无用语句,如id=id,则同1功能相同,但错误不会被忽略掉。例如,为了实现name重复的数据插入不报错,可使用一下语句:
INSERT INTO books (name) VALUES ('MySQL Manual') ON duplicate KEY UPDATE id = id
3.insert …select…where not exist
根据select的条件判断是否插入,可以不光通过primary和unique来判断,也可通过其它条件。例如:
INSERT INTO books (name) SELECT 'MySQL Manual' FROM dual WHERE NOT EXISTS (SELECT id FROM books WHERE id = 1)
4.replace into
如果存在primary or unique相同的记录,则先删除掉。再插入新记录。
REPLACE INTO books SELECT 1, 'MySQL Manual' FROM books
1.1.2 grant使用
grant select on testdb.* to teamuser@10.161.204.81 identified by '123456!';
赋予用户teamuser从服务器10.161.204.81上查询数据库testdb所有表的权限;注意赋予内网时,登录也得用内网ip,mysql -h10.161.204.81 -uteamuser -p'123456!'
所有权限用all,即用all代替select
导出数据:
mysql -uroot -p'123456!' testdb -e "select id,name from testarticle where id=\"123456\"" > /home/app/a.txt
导出insert语句
mysqldump -uroot -p'123456!' testdb categorys --default-character-set=utf8 > /home/b.txt
二.数据库维护
2.1故障处理
2.1.1主从不同步的处理-1062
1)查看slave状态:show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.100.22.15
Master_User: repl_user
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000362
Read_Master_Log_Pos: 175989792
Relay_Log_File: relay-bin.000540
Relay_Log_Pos: 258368116
Relay_Master_Log_File: mysql-bin.000361
Slave_IO_Running: Yes
Slave_SQL_Running: No
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 1062
Last_Error: Error 'Duplicate entry '1342170' for key 'PRIMARY'' on query. Default database: 'usercenter'. Query: 'insert into test_charge ……
Skip_Counter: 0
Exec_Master_Log_Pos: 673522500
Relay_Log_Space: 836682055
Until_Condition: None
Until_Log_File:
Until_Log_Pos: 0
Master_SSL_Allowed: No
Master_SSL_CA_File:
Master_SSL_CA_Path:
Master_SSL_Cert:
Master_SSL_Cipher:
Master_SSL_Key:
Seconds_Behind_Master: NULL
Master_SSL_Verify_Server_Cert: No
Last_IO_Errno: 0
Last_IO_Error:
Last_SQL_Errno: 1062
Last_SQL_Error: Error 'Duplicate entry '1342170' for key 'PRIMARY'' on query. Default database: 'usercenter'. Query: 'insert into test_charge ……
Replicate_Ignore_Server_Ids:
Master_Server_Id: 1
分析:
正常情况Seconds_Behind_Master应该为0
解决方法:
A)这种适用于该方法适用于主从库数据相差不大,或者要求数据可以不完全统一的情况,数据要求不严格的情况,具体命令:
slave stop;
set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
slave start;
B)由此表可知MySQL Server System Variables, slave_skip_errors 是无法被动态改变的.
要改变 slave_skip_errors 的方法就只有在 MySQL 启动时加:
--slave_skip_errors=all
或者于 /etc/my.cnf 加入:
slave-skip-errors=all # 于 [mysqld] 下面加入此行
再 restart mysql 即可
确认是否忽略所有错误
mysql> show variables like "%slave%";
slave_skip_errors => ALL # 看到 ALL 就代表会忽略掉所有错误讯息
忽略某个错误编号
若只要排除 Duplicate entry (Last_Errno: 1062), 可以单独指定 Error No, 多个写法如下:
--slave-skip-errors=1062,1053
--slave-skip-errors=all
于 my.cnf 设定忽略
vim /etc/my.cnf
slave-skip-errors=1062 # 于 [mysqld] 下面加入此行
2)扩展:
2.1.2主从不同步的处理,errcode:1236
1)查看slave状态:show slave status\G;
Last_IO_Errno:1236Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'log event entry exceeded max_allowed_packet; Increase max_allowed_packet on master'
解决方法:
A)进入mysql server,即mysql -uusername -ppassword
在mysql命令行中运行如下:
set global max_allowed_packet = 2*1024*1024*10
退出mysql命令行,然后重新登录。
show VARIABLES like '%max_allowed_packet%';
查看下max_allowed_packet是否编辑成功
B)可以编辑my.cnf来修改(windows下my.ini),在[mysqld]段或者mysql的server配置段进行修改。
max_allowed_packet = 20M
如果找不到my.cnf可以通过
mysql --help | grep my.cnf
去寻找my.cnf文件。
有了配置文件,在配置文件中的[mysqld]下边加些常用的配置参数。重启mysql服务器后,该参数即可生效。
2.2 主从设置
2.1.2 从指定位置同步
1)有的时候主从同步有问题了以后,需要从log位置的下一个位置进行同步,相当于跳过那个错误,这时候也可以使用CHANGE MASTER命令来处理,只要找到对应的LOG位置就可以,比如:
slave stop;
CHANGE MASTER TO
MASTER_HOST='10.1.1.75',MASTER_USER='replication',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000006', MASTER_LOG_POS=106;
slave start;
2.3 备份
2.3.1 逻辑备份
1)备份:
mysqldump -hdb.test.com -uusername -ppassword testdb table1 table2 table3 | gzip > /home/mysql_bak/bakup-`date +%Y-%m-%d`.sql.gz
2)恢复:
gunzip < /home/mysql_bak/bakup-2015-03-14.sql.gz | mysql -uusername -ppassword testdb
2.4 启动和停止服务器
2.4.1 启动mysql
1)配置my.cnf文件,然后启动:
./bin/mysqld_safe --user=mysql &
2.4.2 停止mysql
$mysql_dir/bin/mysqladmin -uuser -ppassword shutdown
或./bin/mysqladmin -S /tmp/mysql.sock -uroot -pq1234 shut
2.5优化处理
2.6 常用命令使用
2.6.1 常用命令
1.show processlist;解释:显示系统中正在运行的所有进程,也就是当前正在执行的查询。大多数用户可以查看他们自己的进程,但是如果他们拥有process权限,就可以查看所有人的进程,包括密码。
2.telnet 123.124.92.80 3306 查看是否有权限
3.查看创建表语句:
showcreate table tablename;
例如:
要查看jos_modules表结构的命令:
show create table jos_modules;
4.查看一个表的索引:show index from tblname;