MYSQL备忘

中央气象台

2020-07-11 12:00

news

MySQL

$ aptitude install mysql-server
$ vi /etc/mysql/my.cnf

Tips

  1. 中文乱码
    mysql> set names 'utf8'

权限设置

1、 改表法
$ mysql -u root -p
$ mysql> use mysql;
$ mysql> update user set host = '%' where user = 'root';
$ mysql> select host, user from user;

2、授权法
mysql -h localhost -u root
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION;
# GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'passwd' WITH GRANT OPTION;
# GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.1.3' IDENTIFIED BY 'passwd' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES

修改密码

1. 使用mysqladmin, mysqladmin -u root -p password mypasswd 
2. mysql> REPLACE INTO mysql.user (Host,User,Password) 
                    VALUES ('%','username',PASSWORD('password')); 
   mysql> FLUSH PRIVILEGES 
   
3. mysql> SET PASSWORD FOR root@"%" = PASSWORD('password'); 
4. mysql> GRANT USAGE ON *.* TO root@"%" IDENTIFIED BY 'password'; 

Error 144 [database/table] is marked as crashed and last (automatic?) repair failed

myisamchk -r q  table_name # 快速修复模式,会自动检查索引表和数据表是否能够一致
myisamchk -r table_name   # 删除不一致的数据和索引,并重新构建索引
myisamchk --safe-recover table_name;


Dump & source

1)导出整个数据库

mysqldump -u 用户名 -p 数据库名 > 导出的文件名 
mysqldump -u wcnc -p dbname > dbdump.sql

2)导出一个表

mysqldump -u 用户名 -p 数据库名 表名> 导出的文件名
mysqldump -u root -p dbname table > dbdump.sql

3)导出一个数据库结构

mysqldump -u root -p -d --add-drop-table dbname > dbdump.sql
#-d 不导出数据只导出结构 --add-drop-table 在每个create语句之前增加一个drop table 

4)导入数据库,常用source 命令

mysql -u root -p 
mysql>use dbname
mysql>set names utf8; (先确认编码,如果不设置可能会出现乱码,注意不是UTF-8) 
#然后使用source命令,后面参数为脚本文件(如这里用到的.sql)
mysql>source ~/dbdump.sql

上边的实例只是最基础的,有的时候我们可能需要批量导出多个库,我们就可以加上--databases 或者-B,如下语句:

mysqldump  -uroot -p --databases test mysql #空格分隔
还有的时候我们可能需要把数据库内所有的库全部备份,我们就可以使用-all-databases,如下语句:

mysqldump  -uroot -p -all-databases

HA 配置

edit my.cnf
[mysqld]
datadir                  = /data/mysql
# bind-address           = 127.0.0.1
server-id                = 11  # 每台服务器分配
log_bin                  = /var/log/mysql/mysql-bin.log
binlog_format            = mixed
binlog_do_db             = ewins
binlog_ignore_db         = mysql,information_schema
replicate_do_db          = ewins
replicate_ignore_db      = mysql,information_schema
slave-skip-errors        = all

# auto_increment_offset    = 1
# auto_increment_increment = 2
# sync_binlog             = 1
# log-slave-updates       = 1 
$ /etc/init.d/mysql restart
master 执行
$ mysql -uroot -p
mysql> GRANT REPLICATION SLAVE ON *.* to 'root'@'192.168.56.102' identified by 'password';
mysql> flush privileges;
mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000005 | 107      |              |                  |
+------------------+----------+--------------+------------------+
slave 执行
mysql> change master to
master_host='192.168.1.101',
master_user='root',
master_password='passwd',
master_log_file='mysql-bin.000002',
master_log_pos=427;

mysql> start slave;
mysql> show slave status\G

Slave_IO_Running 与 Slave_SQL_Running 都是 YES,才表明状态正常。

Keepalived Configuration file
! Configuration File for keepalived
global_defs {
    router_id MYSQL_HA
}

vrrp_script check_run {
    script "/data/keepalived/check_mysql.sh"
    interval 5
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 50
    priority 101
    advert_int 1
    nopreempt
    authentication {
        auth_type PASS
        auth_pass passwd
    }
    virtual_ipaddress {
        172.20.29.242
    }
    track_script {
        check_run
    }
}

check_mysql.sh

#!/bin/bash
MYSQL_USER=root
MYSQL_PASS=passwd
CHECK_COUNT=5

counter=1
while true
do
    mysql -u$MYSQL_USER -p$MYSQL_PASS -e "show status;"  >/dev/null 2>&1
    i=$?
    ps aux | grep mysqld | grep -v grep > /dev/null 2>&1
    j=$?
    if [ $i = 0 ] && [ $j = 0 ]
    then
        exit 0
    else
        if [ $i = 1 ] && [ $j = 0 ]
        then
            exit 0
        else
            if [ $counter -gt $CHECK_COUNT ]
            then
                break
            fi
        let counter++
        continue
        fi
    fi
done
/etc/init.d/keepalived stop
exit 1

Sequence function

CREATE TABLE `SEQUENCE` (
  `NAME` varchar(255) NOT NULL,
  `CURRENTVALUE` int(11) unsigned DEFAULT NULL,
  `INCREMENT` int(2) DEFAULT NULL,
  PRIMARY KEY (`NAME`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

set global log_bin_trust_function_creators=1;

delimiter //

CREATE DEFINER=`root`@`%` FUNCTION `currval`(seq_name VARCHAR(50)) RETURNS int(11)
BEGIN  
  DECLARE value INTEGER;  
  SET value = 0;  
  SELECT CURRENTVALUE INTO value FROM SEQUENCE  
  WHERE NAME = seq_name;  
  RETURN value;  
END//

CREATE DEFINER=`root`@`%` FUNCTION `setval`(seq_name VARCHAR(50), value INTEGER) RETURNS int(11)
BEGIN  
   UPDATE SEQUENCE  
   SET  CURRENTVALUE = value  
   WHERE NAME = seq_name;  
   RETURN currval(seq_name);  
END//

CREATE DEFINER=`root`@`%` FUNCTION `nextval`(seq_name VARCHAR(50)) RETURNS int(11)
BEGIN  
   DECLARE exist int(1);
   SELECT count(1) into exist FROM SEQUENCE WHERE NAME = seq_name;
   if exist = 0 then
       INSERT INTO SEQUENCE (NAME, CURRENTVALUE, INCREMENT)
       VALUES ( seq_name, 1, 1);
       RETURN 1;
   else
       UPDATE SEQUENCE  
       SET  CURRENTVALUE = CURRENTVALUE + INCREMENT  
       WHERE NAME = seq_name;  
       RETURN currval(seq_name);  
   end if;
END//

delimiter ;

dump脚本

# !/bin/bash 
# This is a ShellScript For Auto DB Backup 
# Setting 
# 设置数据库名,数据库登录名,密码,备份路径,日志路径,数据文件位置,以及备份方式 
# 默认情况下备份方式是tar,还可以是mysqldump,mysqldotcopy 
# 默认情况下,用root(空)登录mysql数据库,备份至/root/dbxxxxx.tgz 

DBName=develop 
DBUser=root 
DBPasswd=root
BackupPath=/home/karas/ 
LogFile=/home/karas/db.log 
DBPath=/var/lib/mysql/ 
BackupMethod=mysqldump 

# BackupMethod=mysqlhotcopy 

# BackupMethod=tar 

# Setting End 

NewFile="$BackupPath"db$(date +%y%m%d).tgz 
DumpFile="$BackupPath"db$(date +%y%m%d) 
OldFile="$BackupPath"db$(date +%y%m%d --date='5 days ago').tgz 

echo "-------------------------------------------" >;>; $LogFile 
echo $(date +"%y-%m-%d %H:%M:%S") >;>; $LogFile 
echo "--------------------------" >;>; $LogFile 

# Delete Old File 

if [ -f $OldFile ] 
then 
   rm -f $OldFile >;>; $LogFile 2>;&1 
   echo "[$OldFile]Delete Old File Success!" >;>; $LogFile 
else 
   echo "[$OldFile]No Old Backup File!" >;>; $LogFile 
fi 

if [ -f $NewFile ] 
then 
   echo "[$NewFile]The Backup File is exists,Can't Backup!" >;>; $LogFile 
else 
   case $BackupMethod in 
   mysqldump) 
      if [ -z $DBPasswd ] 
      then 
         mysqldump -u $DBUser --opt $DBName >; $DumpFile 
      else 
         mysqldump -u $DBUser -p$DBPasswd --opt $DBName >; $DumpFile 
      fi 
      tar czvf $NewFile $DumpFile >;>; $LogFile 2>;&1 
      echo "[$NewFile]Backup Success!" >;>; $LogFile 
      rm -rf $DumpFile 
      ;; 
   mysqlhotcopy) 
      rm -rf $DumpFile 
      mkdir $DumpFile 
      if [ -z $DBPasswd ] 
      then 
         mysqlhotcopy -u $DBUser $DBName $DumpFile >;>; $LogFile 2>;&1 
      else 
         mysqlhotcopy -u $DBUser -p $DBPasswd $DBName $DumpFile >;>;$LogFile 2>;&1 
      fi 
      tar czvf $NewFile $DumpFile >;>; $LogFile 2>;&1 
      echo "[$NewFile]Backup Success!" >;>; $LogFile 
      rm -rf $DumpFile 
      ;; 
   *) 
      /etc/init.d/mysqld stop >;/dev/null 2>;&1 
      tar czvf $NewFile $DBPath$DBName >;>; $LogFile 2>;&1 
      /etc/init.d/mysqld start >;/dev/null 2>;&1 
      echo "[$NewFile]Backup Success!" >;>; $LogFile 
      ;; 
   esac 
fi 

echo "-------------------------------------------" >;>; $LogFile
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,039评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,223评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,916评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,009评论 1 291
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,030评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,011评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,934评论 3 416
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,754评论 0 271
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,202评论 1 309
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,433评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,590评论 1 346
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,321评论 5 342
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,917评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,568评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,738评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,583评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,482评论 2 352

推荐阅读更多精彩内容