MySQL高级01

Posted kris12

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL高级01相关的知识,希望对你有一定的参考价值。

 

1. mysql的安装配置

MySQL支持大型数据库,支持5000万条记录的数据仓库,32位系统表文件最大可支持4GB,64位系统支持最大的表文件为8TB。

官网下载地址:http://dev.mysql.com/downloads/mysql/

拷贝&解压缩

1、CentOS6

rpm -qa|grep mysql

如果存在mysql-libs的旧版本包如下:

请先执行卸载命令:rpm -e --nodeps mysql-libs

2、CentOS7

rpm -qa|grep mariadb

如果存在如下:

请先执行卸载命令:rpm -e --nodeps mariadb-libs

检查/tmp文件夹权限

由于mysql安装过程中,会通过mysql用户在/tmp目录下新建tmp_db文件,所以请给/tmp较大的权限

执行 :chmod -R 777 /tmp

[root@kris ~]# cd /

[root@kris /]# ll

可以看到

drwxrwxrwt. 27 root root 4096 1月 11 08:26 tmp

 

在mysql的安装文件目录下执行:

rpm -ivh MySQL-client-5.5.54-1.linux2.6.x86_64.rpm
rpm -ivh MySQL-server-5.5.54-1.linux2.6.x86_64.rpm

在把它拖到opt目录下安装

[root@kris /]# cd /opt

 

查看MySQL安装版本

可以执行 mysqladmin --version命令,类似java -version如果打出消息,即为成功。

通过vim 查看 mysql用户和mysql组 

 

 

在mysql首次登录前要给 root 账号设置密码

[root@kris opt]# cd

[root@kris ~]# service mysql start

启动服务后,执行命令 

[root@kris ~]# mysqladmin -u root password \'123456\'

然后通过 mysql -uroot -p123123进行登录

[root@kris ~]# mysql -uroot -p123456

 

在linux下查看安装目录 ps -ef | grep mysql

 自启动mysql服务器,

 

修改字符集

1 查看字符集

show variables like \'character%\'; 

show variables like \'%char%\';

看看出现的结果:

默认的服务器用了latin1,所以会乱码。

2 修改my-huge.cnf

/usr/share/mysql/ 中找到my-huge.cnf的配置文件,

拷贝其中的my-huge.cnf /etc/ 并命名为my.cnf   (cp my-huge.cnf /etc/my.cnf)

然后修改my.cnf:
[client]
default-character-set=utf8
[mysqld]
character_set_server=utf8
character_set_client=utf8
collation-server=utf8_general_ci
[mysql]
default-character-set=utf8

3、重新启动mysql

service mysql restart

查看原库的字符集:show create database mydb

但是原库的设定不会发生变化,参数修改之对新建的数据库生效

4、已生成的库表字符集如何变更

修改数据库的字符集

mysql> alter database mydb character set \'utf8\';

修改数据表的字符集

mysql> alter table mytbl convert to character set \'utf8\';

但是原有的数据如果是用非\'utf8\'编码的话,数据本身不会发生改变。

通过工具远程访问

1、先 ping 一下数据库服务器的ip 地址确认网络畅通。

2、关闭数据库服务的防火墙

service iptables stop

3、 确认Mysql中已经有可以通过远程登录的账户

select * from mysql.user where user=\'root\' and host=\'%\';

如果没有用户,先执行如下命令:

grant all privileges on *.* to root@\'%\' identified by \'123123\';

4、测试连接:

 

 

Mysql的一些杂项配置

MySQL的sql_mode合理设置

sql_mode是个很容易被忽视的变量,默认值是空值,在这种设置下是可以允许一些非法操作的,比如允许一些非法数据的插入在生产环境必须将这个值设置为严格模式,所以开

发、测试环境的数据库也必须要设置,这样在开发测试阶段就可以发现问题。

mysql> SHOW  VARIABLES LIKE \'sql_mode\';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| sql_mode      |       |
+---------------+-------+
1 row in set (0.00 sec)

sql_mode常用值如下: 

set sql_mode=\'ONLY_FULL_GROUP_BY\';

ONLY_FULL_GROUP_BY:

对于GROUP BY聚合操作,如果在SELECT中的列,没有在GROUP BY中出现,那么这个SQL是不合法的,因为列不在GROUP BY从句中

 

7种join

 

MySQL主从复制

复制的基本原理

  slave会从master读取binlog来进行数据同步;

① master将改变记录到二进制日志(binary log),这些记录过程叫做二进制日志事件,binary log events;

② slave将master的binary log events拷贝到它的中继日志(relay log);

③slave重做中继日志中的事件,将改变应用到自己的数据库中。

MySQL复制是异步的且串行化的。

复制的基本原则

每个slave只有一个master;每个slave只能有一个唯一的服务器ID;每个master可以有多个salve;

复制的最大问题---延迟

一主一从复制的配置

mysql版本一致且后台以服务运行;主从都配置在[mysqld]结点下,都是小写;

一、主机修改my.ini配置文件:

①主服务器唯一ID 
②启动二进制日志
③设置不要复制的数据库
④设置需要复制的数据库
⑤设置logbin格式
[mysqld]
# The TCP/IP Port the MySQL Server will listen on
port=3306
server-id=1 #主数据库端ID号
log-bin=F:/MySQLData/MySQLServer5.5/data/mysqlbin  #开启二进制日志   
binlog-ignore-db=mysql #设置不要复制的数据库
binlog-do-db=mydb2  #设置需要复制的数据库
binlog_format=STATEMENT #设置logbin格式,默认的

mysql主从复制起始时,从机不继承主机数据;

 二、从机配置文件修改my.cnf的[mysqld]栏位下;

[root@kris ~]# cd /etc
[root@kris etc]# vim my.cnf

server-id = 2 #注意my.cnf 中有server-id = 1,把它修改了即可,与主服务的server-id不能一样。
relay-log=mysql-relay

因修改过配置文件,请主机+从机都重启后台mysql服务;主机从机都关闭防火墙

三、在Windows主机上建立帐户并授权slave:

GRANT REPLICATION SLAVE ON *.* TO \'slave\'@\'192.168.1.100\' IDENTIFIED BY \'123456\'; #授权账号

查询master的状态--->>
 SHOW MASTER STATUS;
  -->> 记录下File和Position的值,执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化。

四、在Linux从机上配置需要复制的主机:

CHANGE MASTER TO MASTER_HOST=\'192.168.43.179\',MASTER_USER=\'slave\',MASTER_PASSWORD=\'123456\',MASTER_LOG_FILE=\'mysqlbin.000001\',MASTER_LOG_POS=107;  
#注意这里是数字,不加单引号;登陆的账号是主服务授权的账号和密码

START SLAVE; 

SHOW SLAVE STATUS;

mysql> show slave status\\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.43.179
                  Master_User: slave
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysqlbin.000004
          Read_Master_Log_Pos: 645
               Relay_Log_File: mysql-relay.000002
                Relay_Log_Pos: 790
        Relay_Master_Log_File: mysqlbin.000004
             Slave_IO_Running: Yes #两个都为yes表示主从配置成功!
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
          ......
1 row in set (0.00 sec)

 stop slave; 停止从服务复制功能

 五、主机新建库、新建表、insert记录,从机复制;测试。

CREATE DATABASE mydb2;
USE mydb2;

CREATE TABLE users (
uid INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(100) NOT NULL, email VARCHAR(200));

INSERT INTO users (username, email) VALUES (\'kris\', \'kris@qq.com\'),
(\'smile\',\'smile@123.com\');

 

以上是关于MySQL高级01的主要内容,如果未能解决你的问题,请参考以下文章

关于mysql驱动版本报错解决,Cause: com.mysql.jdbc.exceptions.jdbc4Unknown system variable ‘query_cache_size(代码片段

Mysql高级-day01

MySQL高级笔记-01

MySQL高级01

部分代码片段

在 Wordpress 中使用 JOIN 进行高级 MySQL 查询