MySQL数据库

By:大官人

一.MySQL介绍

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 最流行的关系型数据库管理系统,在 WEB 应用方面MySQL是最好的RDBMS (Relational Database Management System,关系数据库管理系统)应用软件之一。MySQL是一种关联数据库管理系统,关联数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,它分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。由于其社区版的性能卓越,搭配 PHP 和 Apache 可组成良好的开发环境。本文主要以运维角度讲解mysql的安装和维护知识,不会过多涉及DBA相关内容。

二.MySQL版本选择

       截至当前mysql的最新版本是5.7.x。但是在mysql5.5以后oracle公司已经收购了mysql。所以大部分用户担心日后mysql会走上商业化的道路,在版本的选择上都是小于等于5.6.x。本文以mysql5.6.10为例讲解。

三.Mysql的安装

3.1安装依赖建立mysql用户

yum -y install cmake gcc gcc-c++ ncurses-devel
useradd -M -s /sbin/nologin mysql
3.2安装mysql
3.2.1源码编译安装
tar zxf mysql-5.6.33.tar.gz
cd mysql-5.6.33
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \  #mysql的安装目录
-DMYSQL_DATADIR=/data/mysql \      #mysql的数据目录
-DSYSCONFDIR=/etc \                  #默认的配置文件目录
-DEXTRA_CHARSETS=all \
-DDEFAULT_CHARSET=utf8 \           #字符集为utf8
-DDEFAULT_COLLATION=utf8_general_ci \         
-DWITH_INNOBASE_STORAGE_ENGINE=1 \     #编译innodb引擎
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_UNIX_ADDR=/var/lib/mysql \   #socket路径
-DMYSQL_TCP_PORT=3306 \      #默认端口
-DWITH_DEBUG=0 \
-DWITH_INNODB_MEMCACHED=1 \
-DWITH_SPHINX_STORAGE_ENGINE=1 \    #安装sphinx引擎
-DENABLED_LOCAL_INFILE=1

make

make install

3.2.2二进制安装

tar zxf mysql-5.6.33-linux-glibc2.5-x86_64.tar.gz
mv mysql-5.6.33-linux-glibc2.5-x86_64 /usr/local/
ln –s /usr/local/mysql-5.6.33-linux-glibc2.5-x86_64 /usr/local/mysql  #创建软连接方便版本的升级

注:一般我都是用这种二进制安装方法,简单快速。编译安装mysql时间过长

3.3初始化数据库

root@template /usr/local 18:41:20 # /usr/local/mysql/scripts/mysql_install_db--defaults-file=/etc/my.cnf --basedir=/usr/local/mysql --datadir=/data/mysql--user=mysql
WARNING: The host 'template' could not be looked upwith resolveip.
This probably means that your libc libraries are not100 % compatible
with this binary MySQL version. The MySQL daemon,mysqld, should work
normally with the exception that host name resolvingwill not work.
This means that you should use IP addresses insteadof hostnames
when specifying MySQL privileges !
Installing MySQL system tables...
160909 18:41:48 [Note] /usr/local/mysql/bin/mysqld(mysqld 5.5.52) starting as process 1347 ...
OK
Filling help tables...
160909 18:41:48 [Note]/usr/local/mysql/bin/mysqld (mysqld 5.5.52) starting as process 1354 ...
OK
 
To start mysqld at boot time you have to copy
support-files/mysql.server to the right place foryour system
 
PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL rootUSER !
To do so, start the server, then issue the followingcommands:
 
/usr/local/mysql/bin/mysqladmin -u root password'new-password'
/usr/local/mysql/bin/mysqladmin -u root -h templatepassword 'new-password'
 
Alternatively you can run:
/usr/local/mysql/bin/mysql_secure_installation
 
which will also give you the option of removing thetest
databases and anonymous user created bydefault.  This is
strongly recommended for production servers.
 
See the manual for more instructions.
 
You can start the MySQL daemon with:
cd /usr/local/mysql ; /usr/local/mysql/bin/mysqld_safe&
 
You can test the MySQL daemon with mysql-test-run.pl
cd /usr/local/mysql/mysql-test ; perlmysql-test-run.pl
 
Please report any problems at http://bugs.mysql.com/
root@template /usr/local 18:41:48 # ln -s/usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
root@template /usr/local 18:44:21 # ln -s /usr/local/mysql/bin/mysql/usr/bin/mysql
root@template /usr/local 18:44:34 # ln -s/usr/local/mysql/bin/mysqld_safe /usr/bin/mysqld_safe
root@template /usr/local 18:44:34 # ln -s/usr/local/mysql/bin/mysqladmin /usr/bin/mysqladmin
root@template /usr/local 18:44:34 # ln -s /usr/local/mysql/bin/mysqldump/usr/bin/mysqldump
#以上我们是使用软连接的方法,我们也可以使用环境变量的方法
echo "PATH=/usr/local/mysq/bin:$PATH">> /etc/profile
source /etc/profile
3.4生成配置文件并启动mysql
3.4.1mysql配置文件
root@template /usr/local/mysql/support-files22:14:44 # ll/usr/local/mysql/support-files/    #mysql的配置文件全部在此目录下
total 96
-rwxr-xr-x. 1 7161 31415  1153 Aug 26 23:12 binary-configure
-rw-r--r--. 1 7161 31415  4528 Aug 26 23:12 config.huge.ini
-rw-r--r--. 1 7161 31415  2382 Aug 26 23:12 config.medium.ini
-rw-r--r--. 1 7161 31415  1626 Aug 26 23:12 config.small.ini      
-rw-r--r--. 1 7161 31415   773 Aug 26 19:24 magic
-rw-r--r--. 1 7161 31415  4691 Aug 26 23:12 my-huge.cnf
-rw-r--r--. 1 7161 31415 19759 Aug 26 23:12 my-innodb-heavy-4G.cnf    #生产环境可以使用这个配置文件
-rw-r--r--. 1 7161 31415  4665 Aug 26 23:12 my-large.cnf
-rw-r--r--. 1 7161 31415  4676 Aug 26 23:12 my-medium.cnf
-rw-r--r--. 1 7161 31415  2840 Aug 26 23:12 my-small.cnf       #我们是测试环境直接使用这个配置文件
-rwxr-xr-x. 1 7161 31415   839 Aug 26 23:12 mysql-log-rotate
-rwxr-xr-x. 1 7161 31415 10875 Aug 26 23:12mysql.server
-rwxr-xr-x. 1 7161 31415  1061 Aug 26 23:12 mysqld_multi.server
-rw-r--r--. 1 7161 31415  1326 Aug 26 23:12 ndb-config-2-node.ini
root@template /usr/local/mysql/support-files22:18:19 # cp my-small.cnf /etc/my.cnf
cp overwrite `/etc/my.cnf'? y

3.4.2添加服务启动mysql

root@template /usr/local/mysql/support-files22:19:42 # chkconfig --add mysqld
root@template /usr/local/mysql/support-files22:22:12 # chkconfig mysqld on
root@template /usr/local/mysql/support-files22:22:34 # service mysqld start
Starting MySQL... SUCCESS!
root@template /usr/local/mysql/support-files22:22:40 # mysql    #直接输入mysql进入mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.52-log MySQL Community Server(GPL)
 
Copyright (c) 2000, 2016, Oracle and/or itsaffiliates. All rights reserved.
 
Oracle is a registered trademark of OracleCorporation and/or its
affiliates. Other names may be trademarks of theirrespective
owners.
 
Type 'help;' or '\h' for help. Type '\c' to clearthe current input statement.
 
mysql>

四.MySQL的基本操作

4.1MySQL的登录

4.1.1设置MySQL的登录密码

         1)设置密码

root@template /usr/local/mysql 16:38:55 # mysqladmin-uroot password '123456'
root@template /usr/local/mysql 16:39:03 # mysql
ERROR 1045 (28000): Access denied for user 'root'@'localhost'(using password: NO)
#这时再登录MySQL就需要提供密码
root@template /usr/local/mysql 16:39:05 # mysql-uroot -p123456
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.5.52-log MySQL Community Server(GPL)
 
Copyright (c) 2000, 2016, Oracle and/or itsaffiliates. All rights reserved.
 
Oracle is a registered trademark of OracleCorporation and/or its
affiliates. Other names may be trademarks of theirrespective
owners.
 
Type 'help;' or '\h' for help. Type '\c' to clearthe current input statement.
 
mysql>

 

当我们设置登录密码和使用密码登录的时候,为确保安全一般不希望显示出密码,所以我们一般采用如下方式

root@template /usr/local/mysql 16:42:56 # mysqladmin -uroot password   #使用互交方式
New password:
Confirm new password:
root@template /usr/local/mysql 16:43:29 # mysql -uroot -p      #使用互交方式
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 5.5.52-log MySQL Community Server(GPL)
 
Copyright (c) 2000, 2016, Oracle and/or itsaffiliates. All rights reserved.
 
Oracle is a registered trademark of OracleCorporation and/or its
affiliates. Other names may be trademarks of theirrespective
owners.
 
Type 'help;' or '\h' for help. Type '\c' to clearthe current input statement.
 
mysql>

       2)修改密码

root@template /usr/local/mysql 16:46:36 # mysqladmin -uroot -p password
Enter password:
New password:
Confirm new password:
4.2MySQL的用户权限管理
4.2.1用户的优化
       1)查看默认的用户和用户的介绍
mysql> selectuser,host from mysql.user;  
+------+-----------+
| user | host     |
+------+-----------+
| root | 127.0.0.1 |
| root | ::1      |
|      |localhost |
| root | localhost |
|      |template  |
| root | template |
+------+-----------+
6 rows in set (0.00 sec)

#以上为mysql安装后默认创建的用户,mysql的用户是由两部分组成,用户名和主机名。所以显示的root有很多但是后面对应的主机名是不同的。

       2)删除多余的用户

mysql> dropuser 'root'@'::1';
Query OK, 0 rows affected (0.04 sec)
mysql> dropuser ''@'localhost';                
Query OK, 0 rows affected (0.00 sec)
mysql> dropuser ''@'template';         
Query OK, 0 rows affected (0.00 sec)
mysql> dropuser 'root'@'template';         
Query OK, 0 rows affected (0.00 sec)
 
mysql> select user,host from mysql.user;
+------+-----------+
| user | host     |
+------+-----------+
| root | 127.0.0.1 |
| root | localhost |
+------+-----------+
注:这里只保留着两个用户即可

4.2.2创建用户

       1)创建用的语句和权限

     

  grant[grants] on '[database_name]'.'[table_name]' to [user_name]@[hostname]identified by '[password]';
       grants是要赋予的权限(权限见下表) database_name 是数据库的名称user_name是用户名 host_name是主机名 最后是密码
       权限列表
       SELECT                     --查询
       UPDATE                     --更新,修改表内容
       INSERT                     --插入
       DELETE                     --删除表内容
       CREATE                     --创建数据库和表
       DROP                       --删除数据库和表
       REFERENCES                 --外键
       INDEX                      --索引
       ALTER                      --修改表结构
       CREATETEMPORARY TABLES    --创建临时表
       LOCKTABLES                --锁表
       EXECUTE                    --执行 
       CREATEVIEW                --创建视图
       SHOWVIEW                  --显示视图
       CREATEROUTINE             --创建存储过程
       ALTERROUTINE              --修改存储过程
       EVENT                      --事件
       TRIGGER                    --触发器

       2)创建一个用户

mysql> grantall on *.* to daguanren@'%' identified by'123456';  #注意这个%代表是任意主机的意思,生产环境不建议使用可以组合使用例如192.168.1.%

Query OK, 0 rows affected (0.02 sec)
mysql> select user,host from mysql.user;
+-----------+-----------+
| user      |host      |
+-----------+-----------+
| daguanren | %         |
| root      |127.0.0.1 |
| root      |localhost |
+-----------+-----------+
3 rows in set (0.00 sec)

       3)权限的刷新

       目前我们创建的用户已经可以直接生效,但是mysql官方建议创建完成用户后要刷新权限表,所以生产环境为了避免意外的出现我们还是执行刷新权限

mysql> flushprivileges;
Query OK, 0 rows affected (0.01 sec)

       4)移出用户权限

mysql> grantinsert,update on *.* to znyang@'%' identified by '123456';  #先创建一个具有insert和update权限的用户
Query OK, 0 rows affected (0.00 sec)

 

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
 
mysql>
mysql> showgrants for znyang@'%';   #查看用户权限
+----------------------------------------------------------------------------------------------------------------+
| Grants for znyang@%                                                                                           |
+----------------------------------------------------------------------------------------------------------------+
| GRANT INSERT, UPDATE ON *.* TO 'znyang'@'%' IDENTIFIEDBY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' |
+----------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
 
mysql>
mysql> revokeupdate on *.* from znyang@'%';  #移除update
Query OK, 0 rows affected (0.00 sec)
 
mysql>
mysql> showgrants for znyang@'%';    #再次查看用户权限
+--------------------------------------------------------------------------------------------------------+
| Grants for znyang@%                                                                                   |
+--------------------------------------------------------------------------------------------------------+
| GRANT INSERT ON *.* TO 'znyang'@'%' IDENTIFIED BYPASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' |
+--------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
 
mysql>
4.2.3常用SQL语句
       1)查看数据
mysql> showdatabases;
+--------------------+
| Database          |
+--------------------+
| information_schema |
| log               |
| mysql             |
| performance_schema |
| test              |
+--------------------+
5 rows in set (0.04 sec)
 
mysql>

       2)切换数据库

mysql> use test
Database changed
mysql>

       3)查看数据库里面的表

mysql> usemysql
Database changed
mysql> showtables;
+---------------------------+
| Tables_in_mysql           |
+---------------------------+
| columns_priv              |
| db                        |
| event                     |
| func                      |
| general_log               |
| help_category             |
| help_keyword              |
| help_relation             |
| help_topic                |
| host                      |
| ndb_binlog_index          |
| plugin                    |
| proc                      |
| procs_priv                |
| proxies_priv              |
| servers                   |
| slow_log                  |
| tables_priv               |
| time_zone                 |
| time_zone_leap_second     |
| time_zone_name            |
| time_zone_transition      |
| time_zone_transition_type |
| user                      |
+---------------------------+
24 rows in set (0.00 sec)
 
mysql>

4)创建数据库和表

createdatabase [database_name];
createtable 表名(id int(4)   #创建表 id 整数型
                  not null   #id不可谓空
                  primary key auto_increment  #id为主键且自动增长
                  COMMENT '内容' , #注释
                  name char(20)   #name字符串型
                  not null   #不可为空
                              default 值  #定义默认值
                  );
mysql> createdatabase daguanren;
Query OK, 1 row affected (0.01 sec)
 
mysql> usedaguanren
Database changed
mysql> createtable users(id int(4) not null primary key auto_increment COMMENT 'id',namechar(20) not null default ''); 
Query OK, 0 rows affected (0.01 sec)
 
mysql>

       5)查看数据库的表结构

mysql>desc users;
+-------+----------+------+-----+---------+----------------+
| Field | Type    | Null | Key | Default | Extra         |
+-------+----------+------+-----+---------+----------------+
| id    |int(4)   | NO   | PRI | NULL    | auto_increment |
| name  |char(20) | NO   |     |        |                |
+-------+----------+------+-----+---------+----------------+
2 rows in set (0.01 sec)

       6)插入数据

      

insert into [table_name](field,…) values(value….);
mysql> insertinto users(name) values('daguanren');
Query OK, 1 row affected (0.01 sec)
 
mysql> select * from users;   
+----+-----------+
| id | name     |
+----+-----------+
|  1 | daguanren |
+----+-----------+
1 row in set (0.03 sec)

7)修改数据

updata[table_name] set [field]=[value] ……

mysql> insertinto users(name) values('xiaoguanren');           
Query OK, 1 row affected (0.00 sec)
 
mysql> select* from users;                         
+----+-------------+
| id | name       |
+----+-------------+
|  1 |daguanren   |
|  2 | xiaoguanren |
+----+-------------+
2 rows in set (0.00 sec)
mysql> updateusers set name='bigguanren' where id=2;    
Query OK, 1 row affected (0.03 sec)
Rows matched: 1 Changed: 1  Warnings: 0
mysql> select * from users;                              
+----+------------+
| id | name      |
+----+------------+
|  1 |daguanren  |
|  2 | bigguanren |
+----+------------+
2 rows in set (0.00 sec)

       8)删除数据

       delete from [table_name] …..;

       #...代表条件生产一定要加上不然整个表都会被删除

mysql> select* from users;                              
+----+------------+
| id | name      |
+----+------------+
|  1 | daguanren |
|  2 | bigguanren |
+----+------------+
2 rows in set (0.00 sec)
 
mysql> deletefrom users where id=2;
Query OK, 1 row affected (0.01 sec)
 
mysql> select* from users;
+----+-----------+
| id | name     |
+----+-----------+
|  1 | daguanren |
+----+-----------+
1 row in set (0.00 sec)

       9)其他

#清除表中所有内容

truncate table 表名;

#向表中插入新字段

alter table 表名 add 新字段 字段类型;

#删除字段

alter table 表名 drop 字段名;

#修改表名

alter table 表名 rename to 新表名;

rename table 表名 to 新表名;

#删除表

drop table 表名;

五.MySQL的备份

5.1备份还原单个数据库

5.1.1方法1

mysqldump–u[user_name] –p[passwoed] [databasename] > [file_name];
root@template /usr/local/mysql 21:04:49 # mkdir /backup/mysql -p                        
root@template /usr/local/mysql 21:05:41 # cd /backup/mysql/
root@template /backup/mysql 21:05:46 # mysqldump -uroot -p7758521 daguanren >back1.sql
root@template /backup/mysql 21:06:10 # ll
total 4
-rw-r--r--. 1 rootroot 1906 Sep 12 21:06 back1.sql

5.1.2方法2

mysqldump –u[user_name]–p[passwoed] -B [databasename] > [file_name];
root@template /backup/mysql 21:09:02 # mysqldump -uroot -p7758521 -B daguanren> back2.sql
root@template /backup/mysql 21:09:07 # ll
total 8
-rw-r--r--. 1 root root 1906 Sep 12 21:09 back1.sql
-rw-r--r--. 1 root root 2058 Sep 12 21:09 back2.sql

5.1.3还原数据库和方法1 方法2的比较

       mysql –u[user_name] –p[password] < [file_name]

root@template /backup/mysql 21:10:48 #mysql -uroot-p7758521 < back1.sql;
ERROR 1046 (3D000) at line 22: No database selected
root@template /backup/mysql 21:11:45 # mysql -uroot-p7758521 < back2.sql;
#我们可以看到用方法1备份的文件还原失败了提示没有选在数据库,而用方法2备份的可以成功,我们对比一下俩个备份文件
root@template /backup/mysql 21:15:58 # diffback1.sql back2.sql
18a19,26
> -- Current Database: `daguanren`
> --
>
> CREATE DATABASE /*!32312IF NOT EXISTS*/ `daguanren` /*!40100 DEFAULT CHARACTER SET utf8 */;
>
> USE `daguanren`;                            
>
> --
51c59
< -- Dump completed on 2016-09-12 21:09:02
---
> -- Dump completed on 2016-09-12 21:09:07

#从这里可以看出用方法2备份的文件里面有创建数据库并切换数据库,而方法1 的没有,所以使用方法1备份的文件必须先要创建数据库才能恢复所以一般生产我们使用方法2备份

5.2备份还原多个数据库

mysqldump –u[user_name] –p[password] -B [database_name][database_name] ... > [file_name]
root@template /backup/mysql 16:29:15 # mysqldump -uroot -p7758521 -B test daguanren> back3.sql
mysql> dropdatabase test;
Query OK, 0 rows affected (0.00 sec)
 
mysql> dropdatabase daguanren;
Query OK, 1 row affected (0.00 sec)
 
mysql> showdatabases;
+--------------------+
| Database          |
+--------------------+
| information_schema |
| log               |
| mysql             |
| performance_schema |
+--------------------+
4 rows in set (0.00 sec)
root@template /backup/mysql 16:31:10 # mysql -uroot -p7758521 < back3.sql
root@template /backup/mysql 16:31:19 # mysql -uroot-p      
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 36
Server version: 5.5.52-log MySQL Community Server(GPL)
 
Copyright (c) 2000, 2016, Oracle and/or itsaffiliates. All rights reserved.
 
Oracle is a registered trademark of OracleCorporation and/or its
affiliates. Other names may be trademarks of theirrespective
owners.
 
Type 'help;' or '\h' for help. Type '\c' to clearthe current input statement.
 
mysql> showdatabases;
+--------------------+
| Database          |
+--------------------+
| information_schema |
| daguanren          |
| log               |
| mysql             |
| performance_schema |
| test               |
+--------------------+
6 rows in set (0.00 sec)
5.3数据表的备份还原
mysqldump -uroot -p7758521 [database_name] [table_name][table_name] … > [file_name]
mysql> use daguanren
Database changed
mysql> show tables;
+---------------------+
| Tables_in_daguanren |
+---------------------+
| users              |
+---------------------+
1 row in set (0.00 sec)
 
mysql> createtable users2(id int(4) not null primary key auto_increment COMMENT 'id',namechar(20) not null default '');
Query OK, 0 rows affected (0.04 sec)                                                                                               
 
mysql> show tables;
+---------------------+
| Tables_in_daguanren |
+---------------------+
| users               |
| users2              |
+---------------------+
2 rows in set (0.00 sec)
mysql> \q
Bye
root@template /backup/mysql 16:39:37 # mysqldump -uroot -p7758521 daguanren usersusers2 > back4.sql
root@template /backup/mysql 16:40:32 # mysql -uroot-p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 39
Server version: 5.5.52-log MySQL Community Server(GPL)
 
Copyright (c) 2000, 2016, Oracle and/or itsaffiliates. All rights reserved.
 
Oracle is a registered trademark of OracleCorporation and/or its
affiliates. Other names may be trademarks of theirrespective
owners.
 
Type 'help;' or '\h' for help. Type '\c' to clearthe current input statement.
 
mysql> usedaguanren
Database changed
mysql> show tables;
+---------------------+
| Tables_in_daguanren |
+---------------------+
| users              |
| users2             |
+---------------------+
2 rows in set (0.00 sec)
 
mysql>drop table users;
Query OK, 0 rows affected (0.00 sec)
 
mysql> droptable users2;
Query OK, 0 rows affected (0.01 sec)
 
mysql> showtables;     
Empty set (0.00 sec)
 
mysql>\q
Bye
root@template /backup/mysql 16:43:38 # mysql -uroot -p7758521 daguanren <back4.sql
root@template /backup/mysql 16:43:44 # mysql -uroot-p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 42
Server version: 5.5.52-log MySQL Community Server(GPL)
 
Copyright (c) 2000, 2016, Oracle and/or itsaffiliates. All rights reserved.
 
Oracle is a registered trademark of OracleCorporation and/or its
affiliates. Other names may be trademarks of theirrespective
owners.
 
Type 'help;' or '\h' for help. Type '\c' to clearthe current input statement.
 
mysql> use daguanren
Database changed
mysql> show tables;
+---------------------+
| Tables_in_daguanren |
+---------------------+
| users               |
| users2              |
+---------------------+
2 rows in set (0.00 sec)
 
mysql>
5.4mysql的全库备份
mysqldump –u[user_name] –p[password] -A -B> [file_name]
root@template /backup/mysql 16:49:25 # mysqldump -uroot -p7758521 -A -B >back5.sql
-- Warning: Skipping the data of table mysql.event.Specify the --events option explicitly.
root@template /backup/mysql 16:49:50 # mysql -uroot-p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 45
Server version: 5.5.52-log MySQL Community Server(GPL)
 
Copyright (c) 2000, 2016, Oracle and/or itsaffiliates. All rights reserved.
 
Oracle is a registered trademark of OracleCorporation and/or its
affiliates. Other names may be trademarks of theirrespective
owners.
 
Type 'help;' or '\h' for help. Type '\c' to clearthe current input statement.
 
mysql> showdatabases;
+--------------------+
| Database          |
+--------------------+
| information_schema |
| daguanren          |
| log               |
| mysql             |
| performance_schema |
| test               |
+--------------------+
6 rows in set (0.00 sec)
mysql> dropdatabase daguanren;         
Query OK, 2 rows affected (0.03 sec)
mysql> dropdatabase test;
Query OK, 0 rows affected (0.00 sec)
mysql> showdatabases;
+--------------------+
| Database          |
+--------------------+
| information_schema |
| log               |
| mysql             |
| performance_schema |
+--------------------+
root@template /backup/mysql 16:53:09 # mysql -uroot -p7758521 < back5.sql
root@template /backup/mysql 16:53:34 # mysql -uroot-p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 47
Server version: 5.5.52-log MySQL Community Server(GPL)
 
Copyright (c) 2000, 2016, Oracle and/or itsaffiliates. All rights reserved.
 
Oracle is a registered trademark of Oracle Corporationand/or its
affiliates. Other names may be trademarks of theirrespective
owners.
 
Type 'help;' or '\h' for help. Type '\c' to clearthe current input statement.
 
mysql> showdatabases;
+--------------------+
| Database          |
+--------------------+
| information_schema |
| daguanren          |
| log               |
| mysql             |
| performance_schema |
| test               |
+--------------------+
6 rows in set (0.00 sec)

六.MySQL的多实例

6.1建立目录

mkdir -p /data/{3306,3307}/data/log

chown -R mysql.mysql /data

6.2建立多实例配置文件

#3306端口配置文件

cat>/etc/my_3306.cnf<<EOF
[client]                                                  
port = 3306                                           
socket = /data/3306/mysql.socket            
[mysqld]                                                      
server-id = 1                                                
port = 3306                                           
socket = /data/3306/mysql.socket            
datadir = /data/3306/data                 
pid-file = /data/3306/mysql.pid        
EOF

3307端口配置文件

cat>/etc/my_3307.cnf<<EOF
[client]                                                  
port = 3307                                           
socket = /data/3307/mysql.socket            
[mysqld]                                                      
server-id = 2                                                
port = 3307                                           
socket = /data/3307/mysql.socket            
datadir = /data/3307/data                 
pid-file = /data/3307/mysql.pid        
EOF

6.3初始化数据库

/usr/local/mysql/scripts/mysql_install_db--basedir=/usr/local/mysql --datadir=/data/3306/data --user=mysql
/usr/local/mysql/scripts/mysql_install_db --basedir=/usr/local/mysql--datadir=/data/3307/data --user=mysql

6.4启动多实例

/usr/local/mysql/bin/mysqld_safe--defaults-file=/etc/my_3306.cnf 2>&1 > /dev/null &
/usr/local/mysql/bin/mysqld_safe--defaults-file=/etc/my_3307.cnf 2>&1 > /dev/null &

6.5登录多实例

root@template /data/mysql 18:08:48 # mysql -S /data/3306/mysql.socket                        
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.5.52 MySQL Community Server (GPL)
 
Copyright (c) 2000, 2016, Oracle and/or itsaffiliates. All rights reserved.
 
Oracle is a registered trademark of OracleCorporation and/or its
affiliates. Other names may be trademarks of theirrespective
owners.
 
Type 'help;' or '\h' for help. Type '\c' to clearthe current input statement.
 
mysql>
#########################################
root@template /data/mysql 18:12:07 # mysql -S /data/3307/mysql.socket
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.5.52 MySQL Community Server (GPL)
 
Copyright (c) 2000, 2016, Oracle and/or itsaffiliates. All rights reserved.
 
Oracle is a registered trademark of OracleCorporation and/or its
affiliates. Other names may be trademarks of theirrespective
owners.
 
Type 'help;' or '\h' for help. Type '\c' to clearthe current input statement.
 
mysql>

6.6关闭多实例

root@template /data/mysql 18:14:19 # mysqladmin -uroot -p -S/data/3306/mysql.socket shutdown 
Enter password:
root@template /data/mysql 18:14:28 # mysqladmin -uroot -p -S /data/3307/mysql.socketshutdown
Enter password:
root@template /data/mysql 18:14:35 #

七.mysql的主从同步

7.1设置主库的ID和binlog

server-id= 1
log-bin= /data/mysql/binlog
root@template /data/mysql 19:07:50 # mkdir/data/mysql/binlog
root@template /data/mysql 19:08:19 # chown -Rmysql.mysql /data/

7.2创建用于主从同步的mysql用户

root@template /data/mysql 19:08:27 # mysql -uroot-p           
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.5.52-log MySQL Community Server(GPL)
 
Copyright (c) 2000, 2016, Oracle and/or itsaffiliates. All rights reserved.
 
Oracle is a registered trademark of OracleCorporation and/or its
affiliates. Other names may be trademarks of theirrespective
owners.
 
Type 'help;' or '\h' for help. Type '\c' to clearthe current input statement.
 
mysql> grantreplication slave on *.* to slave@'%' identified by 'slave';
Query OK, 0 rows affected (0.01 sec)
 
mysql>flush privileges;
Query OK, 0 rows affected (0.00 sec)
 
mysql> showgrants for slave@'%';
+------------------------------------------------------------------------------------------------------------------+
| Grants for slave@%                                                                                              |
+------------------------------------------------------------------------------------------------------------------+
| GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%'IDENTIFIED BY PASSWORD '*51125B3597BEE0FC43E0BCBFEE002EF8641B44CF' |
+------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
7.3锁库锁表备份数据库并记录binlog
root@template /data/mysql 19:08:27 # mysql -uroot -p           
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.5.52-log MySQL Community Server(GPL)
 
Copyright (c) 2000, 2016, Oracle and/or itsaffiliates. All rights reserved.
 
Oracle is a registered trademark of OracleCorporation and/or its
affiliates. Other names may be trademarks of theirrespective
owners.
 
Type 'help;' or '\h' for help. Type '\c' to clearthe current input statement.
 
mysql> grantreplication slave on *.* to slave@'%' identified by 'slave';
Query OK, 0 rows affected (0.01 sec)
 
mysql> flushprivileges;
Query OK, 0 rows affected (0.00 sec)
 
mysql> show grants for slave@'%';
+------------------------------------------------------------------------------------------------------------------+
| Grants for slave@%                                                                                               |
+------------------------------------------------------------------------------------------------------------------+
| GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIEDBY PASSWORD '*51125B3597BEE0FC43E0BCBFEE002EF8641B44CF' |
+------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
 
mysql> flush tables with read lock;
Query OK, 0 rows affected (0.00 sec)
 
mysql> \q
Bye
root@template /data/mysql 19:13:43 # mysqldump -uroot -p7758521 -A -B >all.sql
-- Warning: Skipping the data of table mysql.event.Specify the --events option explicitly.
root@template /data/mysql 19:14:10 # mysql -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.5.52-log MySQL Community Server(GPL)
 
Copyright (c) 2000, 2016, Oracle and/or itsaffiliates. All rights reserved.
 
Oracle is a registered trademark of OracleCorporation and/or its
affiliates. Other names may be trademarks of theirrespective
owners.
 
Type 'help;' or '\h' for help. Type '\c' to clearthe current input statement.
 
mysql> unlocktables;
Query OK, 0 rows affected (0.00 sec)
mysql> showmaster status;
+---------------+----------+--------------+------------------+
| File         | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------+----------+--------------+------------------+
| binlog.000001 |      107 |              |                  |
+---------------+----------+--------------+------------------+
1 row in set (0.00 sec
)

7.4从库导入数据

root@mysql01 ~ 11:22:01 # mysql -uroot -p7758521 < /tmp/all.sql
mysql> select* from users;
+----+-------------+
| id | name       |
+----+-------------+
|  1 |daguanren   |
|  2 |xiaoguanren |
+----+-------------+
2 rows in set (0.00 sec)
 
mysql> select* from users2;
+----+--------------+
| id | name        |
+----+--------------+
|  1 |bigguanren   |
|  2 | smallguanren|
+----+--------------+
2 rows in set (0.00 sec)

7.5从库执行同步

CHANGE MASTER TO MASTER_HOST='master',MASTER_PORT=3306,MASTER_USER='slave',MASTER_PASSWORD='slave',MASTER_LOG_FILE='misql-bin.000003',MASTER_LOG_POS=318;
mysql> CHANGEMASTER TO MASTER_HOST='192.168.44.11',MASTER_PORT=3306,MASTER_USER='slave',MASTER_PASSWORD='slave',MASTER_LOG_FILE='binlog.000001',MASTER_LOG_POS=107;
Query OK, 0 rows affected, 2 warnings (0.17 sec)
 
mysql> startslave;
Query OK, 0 rows affected (0.00 sec)
 
mysql> showslave status\G
*************************** 1. row***************************
              Slave_IO_State: Waiting for master to send event
                 Master_Host: 192.168.44.11
                 Master_User: slave
                 Master_Port: 3306
               Connect_Retry: 60
             Master_Log_File: binlog.000001
         Read_Master_Log_Pos: 107
              Relay_Log_File: mysql-relay-bin.000002
               Relay_Log_Pos: 263
       Relay_Master_Log_File: binlog.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
             Replicate_Do_DB:
         Replicate_Ignore_DB:
          Replicate_Do_Table:
      Replicate_Ignore_Table:
     Replicate_Wild_Do_Table:
 Replicate_Wild_Ignore_Table:
                  Last_Errno: 0
                  Last_Error:
                Skip_Counter: 0
         Exec_Master_Log_Pos: 107
             Relay_Log_Space: 432
             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: 0
Master_SSL_Verify_Server_Cert: No
               Last_IO_Errno: 0
               Last_IO_Error:
              Last_SQL_Errno: 0
              Last_SQL_Error:
 Replicate_Ignore_Server_Ids:
            Master_Server_Id: 1
                 Master_UUID:
            Master_Info_File: /data/mysql/master.info
                   SQL_Delay: 0
         SQL_Remaining_Delay: NULL
     Slave_SQL_Running_State: Slave has read all relay log; waiting for theslave I/O thread to update it
          Master_Retry_Count: 86400
                 Master_Bind:
     Last_IO_Error_Timestamp:
    Last_SQL_Error_Timestamp:
              Master_SSL_Crl:
          Master_SSL_Crlpath:
          Retrieved_Gtid_Set:
           Executed_Gtid_Set:
               Auto_Position: 0
1 row in set (0.00 sec)

7.6验证

7.6.1主库插入数据

root@template /data 19:26:09 # mysql -uroot -p7758521
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 5
Server version: 5.5.52-log MySQL Community Server(GPL)
 
Copyright (c) 2000, 2016, Oracle and/or itsaffiliates. All rights reserved.
 
Oracle is a registered trademark of OracleCorporation and/or its
affiliates. Other names may be trademarks of theirrespective
owners.
 
Type 'help;' or '\h' for help. Type '\c' to clearthe current input statement.
 
mysql> usedaguanren
Database changed
mysql> select* from users;      
+----+-------------+
| id | name       |
+----+-------------+
|  1 |daguanren   |
|  2 |xiaoguanren |
+----+-------------+
2 rows in set (0.00 sec)
 
mysql> insertinto users(name) values('yangzinan');             
Query OK, 1 row affected (0.02 sec)
 
mysql> select* from users;                       
+----+-------------+
| id | name       |
+----+-------------+
|  1 |daguanren   |
|  2 |xiaoguanren |
|  3 | yangzinan   |
+----+-------------+
3 rows in set (0.00 sec)

7.6.2从库检测

mysql> usedaguanren
Database changed
mysql> select* from users;
+----+-------------+
| id | name       |
+----+-------------+
|  1 | daguanren   |
|  2 |xiaoguanren |
|  3 | yangzinan   |
+----+-------------+
3 rows in set (0.00 sec)

八.其他优化参数

8.1.开启关闭事务自动提交
SETAUTOCOMMIT=0 #关闭自动提交
SETAUTOCOMMIT=1 #开启自动提交
8.2.设置数据库只读
read-only
注:对all权限用户无效
8.3.其他参数优化
innodb_buffer_pool_size= 物理内存的1/3或1/2一般不超过50%
max_connections= 100 #最大连接数,此值最大16384
long_query_time= 2 #记录超过两秒的sql语句
long-slow-queries= /data/mysql/slow.log  #记录超过两秒的sql语句
log-error= /data/mysql/error.log  #错误日志
expire_logs_days= 7 #binlog保存时间
skip-name-resolve  #解决连接失败
innodb_data_file_path= ibdata1:10M: ibdata2:10M:autoextend #InnoDB数据文件初始化大小,本例10M