您的位置:首页 > 数据库 > MySQL

MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决

2016-12-26 16:46 671 查看

MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决

一、简介

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

MySQL是一种数据库管理系统。

MySQL是一种关联数据库管理系统。

MySQL软件是一种开放源码软件。

MySQL数据库服务器具有快速、可靠和易于使用的特点。

MySQL服务器工作在客户端/服务器模式下,或嵌入式系统中。

有大量可用的共享MySQL软件。

MySQL表最大能达到多少?

InnoDB存储引擎将InnoDB表保存在一个表空间内,该表空间可由数个文件创建。这样,表的大小就能超过单独文件的最大容量。表空间可包括原始磁盘分区,从而使得很大的表成为可能。表空间的最大容量为64TB。

二、安装MySQL

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

CentOS 安装:

yum install mysql-server


Ubuntu 安装:

1. sudo apt-get install mysql-server
2. sudo apt-get isntall mysql-client
3. sudo apt-get install libmysqlclient-dev

# 检测是否安装成功(是否为LISTEN状态)
sudo netstat -tap | grep mysql


编译安装MySQL-5.5.32:

# 安装依赖包
yum install ncurses-devel gcc gcc-c++ -y

# 创建目录
mkdir -p /home/oldsuo/tools

# 安装cmake软件,gmake编译安装
cd /home/oldsuo/tools/
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 mysql
useradd mysql -s /sbin/nologin -M -g mysql

# 解压编译MySQL
tar zxf mysql-5.5.32.tar.gz
cd mysql-5.5.32
cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.5.32 \
-DMYSQL_DATADIR=/application/mysql-5.5.32/data \
-DMYSQL_UNIX_ADDR=/application/mysql-5.5.32/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: /home/oldsuo/tools/mysql-5.5.32
提示: 编译时可配置的选项很多,具体可参考结尾附录或官方文档:

make
#[100%] Built target my_safe_process
make install
ln -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';

#删除test库
drop database test;


2、添加额外管理员:

# 添加额外管理员,system作为管理员,oldsuo为密码
mysql> delete from mysql.user;
Query OK, 2 rows affected (0.00 sec)
mysql> grant all privileges on *.* to system@'localhost' identified by 'oldsuo' with grant option;
Query OK, 0 rows affected (0.00 sec)
# 刷新MySQL的系统权限相关表,使配置生效
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> select user,host from mysql.user;
+--------+-----------+
| user   | host      |
+--------+-----------+
| system | localhost |
+--------+-----------+
1 row in set (0.00 sec)
mysql>


3、设置登录密码并开机自启:

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

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


mysql> use teacher;
Database changed
mysql> show create table student;
+---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table   | Create Table                                                                                                                                                                                                                                                                    |
+---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| student | CREATE TABLE `student` (
`id` int(4) NOT NULL AUTO_INCREMENT,
`name` char(20) NOT NULL,
`age` tinyint(2) NOT NULL DEFAULT '0',
`dept` varchar(16) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `index_name` (`name`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 |
+---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.01 sec)

mysql> ALTER TABLE student ENGINE = MyISAM;
Query OK, 3 rows affected (0.05 sec)
Records: 3  Duplicates: 0  Warnings: 0

mysql> show create table student;
+---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Table   | Create Table                                                                                                                                                                                                                                                                    |
+---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| student | CREATE TABLE `student` (
`id` int(4) NOT NULL AUTO_INCREMENT,
`name` char(20) NOT NULL,
`age` tinyint(2) NOT NULL DEFAULT '0',
`dept` varchar(16) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `index_name` (`name`)
) ENGINE=MyISAM AUTO_INCREMENT=5 DEFAULT CHARSET=utf8 |
+---------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)


修改实例

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;
Query OK, 0 rows affected (0.00 sec)


五、基本语句命令

运行相关:

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        #登陆


注:本文有看不懂的在后续博客有详解
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: