mysql企业实战(一)

Wesley13
• 阅读 740

一、简介

MySQL是最流行的开放源码SQL数据库管理系统,它是由MySQL AB公司开发、发布并支持的。有以下特点:

  • MySQL是一种数据库管理系统。
  • MySQL是一种关联数据库管理系统。
  • MySQL软件是一种开放源码软件。
  • MySQL数据库服务器具有快速、可靠和易于使用的特点。
  • MySQL服务器工作在客户端/服务器模式下,或嵌入式系统中。
  • 有大量可用的共享MySQL软件。

二、安装MySQL

# 安装依赖包

yum install ncurses-devel gcc gcc-c++ -y

# 创建目录mkdir /opt/software

# 安装cmake软件,gmake编译安装

cd /opt/software/
tar xf cmake-2.8.8.tar.gz
cd cmake-2.8.8
./configure
#CMake has bootstrapped.  Now run gmake.
gmake
gmake install
cd ../

# 开始安装mysql# 创建用户和组groupadd mysqluseradd mysql -s /sbin/nologin -M -g mysql

tar xf mysql-5.5.33.tar.gzcd mysql-5.5.33

*cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.5.33 \*
*-DMYSQL_DATADIR=/application/mysql-5.5.33/data \*
**-DMYSQL_UNIX_ADDR=/application/mysql-5.**5.33/*tmp/mysql.sock \*
*-DDEFAULT_CHARSET=utf8 \*
*-DDEFAULT_COLLATION=utf8_general_ci \*
*-DEXTRA_CHARSETS=gbk,gb2312,utf8,ascii \*
*-DENABLED_LOCAL_INFILE=ON \*
*-DWITH_INNOBASE_STORAGE_ENGINE=1 \*
*-DWITH_FEDERATED_STORAGE_ENGINE=1 \*
*-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \*
*-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \*
*-DWITHOUT_PARTITION_STORAGE_ENGINE=1 \*
*-DWITH_FAST_MUTEXES=1 \*
*-DWITH_ZLIB=bundled \*
*-DENABLED_LOCAL_INFILE=1 \*
*-DWITH_READLINE=1 \*
*-DWITH_EMBEDDED_SERVER=1 \*
-DWITH_DEBUG=0

#-- Build files have been written to: /root/mysql-5.6.10
提示: 编译时可配置的选项很多,具体可参考结尾附录或官方文档make installln -s /application/mysql-5.5.32/ /application/mysql如果上述操作未出现错误,则MySQL5.5.32软件cmake方式的安装就算成功了。

#拷贝配置文件
cp mysql-5.5.32/support-files/my-small.cnf /etc/my.cnf

#添加变量,并使之生效
echo 'export PATH=/application/mysql/bin:$PATH' >>/etc/profile
source /etc/profile
echo $PATH

#授权用户及/tmp/临时文件目录
chown -R mysql.mysql /application/mysql/data/
chmod -R 1777 /tmp/

#初始化数据库
cd /application/mysql/scripts/
./mysql_install_db --basedir=/application/mysql/ --datadir=/application/mysql/data/ --user=mysql
cd ../

#启动数据库
cp support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
/etc/init.d/mysqld  start

#检查端口
netstat -lntup|grep 3306

编译安装完后一般安全操作:

 1、删除不必要的用户和库:

#查看用户和主机列,从mysql.user里查看
select user,host from mysql.user;

#删除用户名为空的库,并检查
delete from mysql.user where user='';
select user,host from mysql.user;

#删除主机名为localhost.localdomain的库,并检查
delete from mysql.user where host='localhost.localdomain';
select user,host from mysql.user;

#删除主机名为::1的库,并检查。::1库的作用为IPV6
delete from mysql.user where host='::1';select user,host from mysql.user;#删除test库drop database test;

2、添加额外管理员:

# 添加额外管理员,system作为管理员,oldgirl为密码
mysql> delete from mysql.user;mysql>grant all privileges on *.* to system@'localhost' identified by 'system' with grant option;mysql>flush privileges;select user,host from mysql.user;3、设置登录密码并开机自启:

#设置密码,并登陆
/application/mysql/bin/mysqladmin -u root password 'oldgirl'
mysql -usystem -p

#开机启动mysqld,并检查
chkconfig mysqld on
chkconfig --list mysqld

 三、字符集

 对于新手来说,字符集乱码问题无疑是头痛的问题,小编就带你不在头痛,从此幸福。

1、字符集简介:

字符集,character set,就是一套表示字符的符号和这些的符号的底层编码;而校验规则,则是在字符集内用于比较字符的一套规则。简单的说,字符集就是一套文字符号及其编码、比较规则的集合,第一个计算机字符集ASC2,MySQL数据库字符集包括字符集和校对规则两个概念,字符集是定义数据库里面的内容字符串的存储方式,而校对规则是定义比较字符串的方式。

建议:中英文环境选择utf8

2、查看设置字符集

# 查看MySQL字符集设置情况
show variables like 'character_set%';
# 查看库的字符集
show create database mysql;
# 查看表的字符集
show create table plugin\G
# 查询所有
show collation;

# 设置表的字符集
set tables utf8;

1>    系统方面
cat /etc/sysconfig/i18n 
LANG="zh_CN.UTF-8"

2>    客户端(程序),调整字符集为latin1。
mysql> set names latin1;        #临时生效

    #更改my.cnf客户端模块的参数,实现set name latin1 的效果,并且永久生效。
    [client]
default-character-set=latin1
#无需重启服务,退出登录就生效,相当于set name latin1。

3>    服务端,更改my.cnf参数
[mysqld]
default-character-set=latin1        
character-set-server=latin1         

4>    库、表、程序
#建表指定utf8字符集
mysql> create database nick_defailtsss DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;

4、将utf8字符集修改成GBK字符集的实际过程

1>    导出表结构
#以utf8格式导出
mysqldump -uroot -p --default-character-set=utf8 -d mysql>20190227table.sql
--default-character-set=gbk        #表示已GBK字符集连接 –d 只表示表结构

2>    编辑alltable.sql 将utf8改成gbk。

3>    确保数据库不在更新,导出所有数据
mysqldump -uroot -p --quick --no-create-info --extended-insert --default-character-set=utf8 mysql>20190227data.sql

4>    打开20190227data.sql将set name utf8 修改成 set names gbk(或者修改系统的服务端和客户端)

5>    建库
create database oldsuo default charset gbk;

6>    创建表,执行alltable.sql
mysql -uroot -p  <20190227table.sql

7>    导入数据
mysql -uroot -p  <20190227table.sql

四、存储引擎

MySQL最常用存储引擎Myisam和Innodb。mysql 5.5.5以后默认存储引擎为Innodb。

MySQL的每种引擎在MySQL里是通过插件的方式使用的,MySQL可以支持多种存储引擎。

1、引擎对应系统文件

1)    MyISAM引擎系统库表对应文件
[root@mysql 3306]# ll /data/3306/data/mysql/
-rw-rw----. 1 mysql mysql  10630 10月 31 16:05 user.frm            #保存表的定义
-rw-rw----. 1 mysql mysql   1140 10月 31 18:40 user.MYD            #数据文件
-rw-rw----. 1 mysql mysql   2048 10月 31 18:40 user.MYI            #索引文件

[root@mysql 3306]# file data/mysql/user.frm 
data/mysql/user.frm: MySQL table definition file Version 9
[root@mysql 3306]# file data/mysql/user.MYD 
data/mysql/user.MYD: DBase 3 data file (167514107 records)
[root@mysql 3306]# file data/mysql/user.MYI
data/mysql/user.MYI: MySQL MISAM compressed data file Version 1

2)    InnoDB引擎

[root@mysql 3306]# ll data/
-rw-rw----. 1 mysql mysql 134217728 10月 31 20:05 ibdata1

2、修改引擎

创建后引擎的修改
语法:    ALTER TABLE student ENGINE = INNODB;
         ALTER TABLE student ENGINE = MyISAM;

3、建表指定引擎

mysql> create table mess (                  
    -> id int(4) not null,                 
    -> name char(20) not null,
    -> age tinyint(2) NOT NULL default '0',
    -> dept varchar(16) default NULL
    -> ) ENGINE=MyISAM CHARSET=utf8;

五、基本语句命令

 运行相关:

1、    单实例mysql启动
[root@localhost ~]# /etc/init.d/mysqld start
Starting MySQL                                             [确定]
#mysqld_safe –user=mysql &

2、    查看MySQL端口
[root@localhost ~]# ss -lntup|grep 3306
tcp    LISTEN     0      50                     *:3306                  *:*      users:(("mysqld",19651,10))

3、    查看MySQL进程
[root@localhost ~]# ps -ef|grep mysql|grep -v grep
root     19543     1  0 Oct10 ?        00:00:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/usr/local/mysql/data --pid-file=/usr/local/mysql/data/localhost.localdomain.pid
mysql    19651 19543  0 Oct10 ?        00:05:04 /usr/local/mysql/libexec/mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data --user=mysql --log-error=/usr/local/mysql/data/localhost.localdomain.err --pid-file=/usr/local/mysql/data/localhost.localdomain.pid --socket=/tmp/mysql.sock --port=3306

4、    MySQL启动原理
/etc/init.d/mysqld 是一个shell启动脚本,启动后最终会调用mysqld_safe脚本,最后调用mysqld服务启动mysql。
        "$manager" \
        --mysqld-safe-compatible \
        --user="$user" \
        --pid-file="$pid_file" >/dev/null 2>&1 &

5、关闭数据库
[root@localhost ~]# /etc/init.d/mysqld stop
Shutting down MySQL....                                    [确定]

6、    查看mysql数据库里操作命令历史
cat /root/.mysql_history

7、    强制linux不记录敏感历史命令
HISTCONTROL=ignorespace

8、    mysql设置密码
/usr/local/mysql/bin/mysqladmin -u root password 'oldsuo'

9、    mysql修改密码,与多实例指定sock修改密码
mysqladmin -uroot -passwd password 'oldsuo'
mysqladmin -uroot -passwd password 'oldsuo' -S /data/3306/mysql.sock

操作相关:

#登陆mysql数据库
mysql -uroot –p

#查看有哪些库
show databases;
#删除test库
drop database test;

#使用test库
use test;
#查看有哪些表
show tables;
#查看suoning表的所有内容
select * from suoning;


#查看当前版本
select version();
#查看当前用户
select user();
#查看用户和主机列,从mysql.user里查看
select user,host from mysql.user;
#删除前为空,后为localhost的库
drop user ""@localhost;

#刷新权限
flush privileges;

#跳出数据库执行命令
system ls;

六、破解mysql登录密码

忘记mysql登录密码也是一件头疼的事,那么小编会让你继续幸福。

1> 普通方式
#> service mysqld stop
#>mysqld_safe --skip-grant-tables &
输入 mysql -uroot -p 回车进入
>use mysql;
> update user set password=PASSWORD("newpass")where user="root";
更改密码为 newpassord
> flush privileges; 更新权限
> quit 退出
service mysqld restart
mysql -uroot -p新密码进入
2> 普通方式的简写
service mysqld stop
mysqld_safe --skip-grant-tables --user=mysql &
mysql
update mysql.user set password=PASSWORD("newpass")where user="root" and host='localhost';
flush privileges;
mysqladmin -uroot -pnewpass shutdown
/etc/init.d/mysqld start
mysql -uroot -pnewpass        #登陆

3>多实例方式
killall mysqld
mysqld_safe –defaults-file=/data/3306/my.cnf –skip-grant-table &
mysql –u root –p –S /data/3306/mysql.sock        #指定sock登陆
update mysql.user set password=PASSWORD("newpass")where user="root";
flush privileges;
mysqladmin -uroot -pnewpass shutdown
/etc/init.d/mysqld start
mysql -uroot -pnewpass        #登陆
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
待兔 待兔
4个月前
手写Java HashMap源码
HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22
Jacquelyn38 Jacquelyn38
3年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
Stella981 Stella981
3年前
Python3:sqlalchemy对mysql数据库操作,非sql语句
Python3:sqlalchemy对mysql数据库操作,非sql语句python3authorlizmdatetime2018020110:00:00coding:utf8'''
Easter79 Easter79
3年前
Twitter的分布式自增ID算法snowflake (Java版)
概述分布式系统中,有一些需要使用全局唯一ID的场景,这种时候为了防止ID冲突可以使用36位的UUID,但是UUID有一些缺点,首先他相对比较长,另外UUID一般是无序的。有些时候我们希望能使用一种简单一些的ID,并且希望ID能够按照时间有序生成。而twitter的snowflake解决了这种需求,最初Twitter把存储系统从MySQL迁移
Wesley13 Wesley13
3年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
3年前
MySQL系列(一)
一、简介MySQL是最流行的开放源码SQL数据库管理系统,它是由MySQLAB公司开发、发布并支持的。有以下特点:MySQL是一种数据库管理系统。MySQL是一种关联数据库管理系统。MySQL软件是一种开放源码软件。MySQL数据库服务器具有快速、可靠和易于使用的特点。MySQL服务器工作在客户端/服务器模
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
为什么mysql不推荐使用雪花ID作为主键
作者:毛辰飞背景在mysql中设计表的时候,mysql官方推荐不要使用uuid或者不连续不重复的雪花id(long形且唯一),而是推荐连续自增的主键id,官方的推荐是auto_increment,那么为什么不建议采用uuid,使用uuid究
Python进阶者 Python进阶者
10个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这