Tag Archive: mysql

6月 13th, 2022

MySQL 是最流行的数据库之一,是一个免费开源的关系型数据库管理系统,hostease虚拟主机分享MySQL的优点有哪些?

一、MySQL的优点主要有以下几个方面:

1、开源

MySQL 是开放源代码的数据库,任何人都可以获取该数据库的源代码。这就使得任何人都可以修正 MySQL 的缺陷,并且任何人都能以任何目的来使用该数据库。MySQL 是一款可以自由使用的数据库。推荐阅读:《MySQL命令行下18个常用命令》

2、跨平台性

MySQL 不仅可以在 Windows 系列的操作系统上运行,还可以在 UNIX、Linux 和 Mac OS 等操作系统上运行。因为很多网站都选择 UNIX、Linux 作为网站的服务器,所以 MySQL 的跨平台性保证了其在 Web 应用方面的优势。虽然微软公司的 SQL Server 数据库是一款很优秀的商业数据库,但是其只能在 Windows 系列的操作系统上运行。因此,MySQL 数据库的跨平台性是一个很大的优势。

3、价格

MySQL 数据库是一个自由软件,任何人都可以从 MySQL 的官方网站上下载该软件,这些社区版本的 MySQL 都是免费试用的,即使是需要付费的附加功能,其价格也是很便宜的。相对于 Oracle、DB2 和 SQL Server 这些价格昂贵的商业软件,MySQL 具有绝对的价格优势。(笔者公司曾经购买过SQL Server 2000,好几万,而且在购买的时候,还需要问你要Windows Server 2000或2003的授权码做校验。操作系统也要好几万。)

4、方便小巧

MySQL 数据库使用标准的SQL语句,学习和使用都有很多资料可以查阅。而且没有复杂的配置等问题。占用的空间相对较小。推荐阅读:《了解MySQL和MariaDB用户及权限(一)》

二、MySQL的主要特点如下:

1、速度: 运行速度快。

2、价格:MySQL对多数个人来说是免费的。

3、容易使用;与其他大型数据库的设置和管理相比,其复杂程度较低,容易学习。

4、可移植性: 能够工作在众多不同的系统平台上,例如:Windows 、Linux、Unix、MacOS等。

5、丰富的接口: 提供了用于C 、C++、Eiffel、Java、Perl、PHP、Python、Rudy和TCL 等语言的API。

6、支持查询语言:MySQL可以利用标准SQL语法和支持ODBC(开放式数据库连接)的应用程序。

7、安全性和连接性; 十分灵活和安全的权限和密码系统,允许主机验证。连接到服务器时,所有的密码均采用加密形式,从而保证了密码安全。并且由于MySQL时网络化的,因此可以在因特网网上的任何地方访问,提高数据共享效率。推荐相关阅读:《mysql之ONLY_FULL_GROUP_BY问题解决办法》

3月 1st, 2018

Python3发布以来,获取了广大程序员们的差评,说不稳定,又是不兼容什么的,不过差评归差评,Python3既然已经发布,肯定是个趋势,但在Python3.4里面,使用原来Python2.7的MySQLdb已经不能连接MySQL数据库了,比较令人纠结,不过我们可以使用PyMySQL,来完成连接MySQL的重任,步骤如下:

序号 描述
1 去github上下载pymysql的安装包 pymysql
2 解压到某个盘符下
3 打开cmd窗口(win环境下),进入pymysql的根目录下执行命令,python setup.py install
4 在程序里,导入pymysql
5 开始连接数据库

数据库操作的API文档连接: http://legacy.python.org/dev/peps/pep-0249/

代码如下:

__author__ = 'qindongliang'
#导入pymysql的包
import pymysql
try:
#获取一个数据库连接,注意如果是UTF-8类型的,需要制定数据库
conn=pymysql.connect(host='localhost',user='root',passwd='qin',db='person',port=3306,charset='utf8')
cur=conn.cursor()#获取一个游标
cur.execute('select * from person')
data=cur.fetchall()
for d in data :
#注意int类型需要使用str函数转义
 print("ID: "+str(d[0])+'  名字: '+d[1]+"  性别: "+d[2])

cur.close()#关闭游标
conn.close()#释放数据库资源
except  Exception :print("发生异常")

结果如下:

D:\python\python.exe D:/pythonide/pythonprojectworkspace/python/mysql.py
ID: 1  名字: 秦天  性别: 男
ID: 2  名字: 王晶  性别: 女

Process finished with exit code 0
TAGS:
1月 31st, 2018

有很多种方法可以将表的存储引擎转换成另一种引擎。每种方法都有其优缺点,在这里介绍四种方法:

选择优先级(pt-online-schema-change > 创建与查询 > 导出和导入 > ALTER TABLE)。

•ALTER TABLE

将表从一个引擎修改为另一个引擎最简单的方法是使用ALTER TABLE语句。下面的语句将TB表的引擎修改为InnoDB:

mysql> ALTER TABLE TB ENGINE = InnoDB;

PS:该方法适用于任何存储引擎。但有一个问题:需要很长的执行时间。

MySQL会按行将数据库从原表复制到一张新的表中,在复制期间可能会消耗系统所有的I/O能力,同时原表上会加上读锁。

•导出和导入(mysqldump)

为了更好的控制转换的过程,可以使用mysqldump工具将数据导出到文件,然后修改文件中CREATE TABLE语句的存储引擎选项,注意同时修改表名,因为同一个数据库中不能存在相同的表名,即使他们使用的是不同的存储引擎。

PS:mysqldump默认会自动在CREATE TABLE语句前加上DROP TABLE语句,不注意这一点可能会导致数据丢失。

1、下面的语句将DB库中的TB表数据导出到tb.sql文件中:

[root@desktop]# mysqldump -u root -p DB TB > tb.sql

2、修改tb.sql文件(如果需要备份TB表,请更改表名):

CREATE TABLE `TB` (
`name` char(1) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

3、下面的语句将tb.sql文件导入到DB库中:

[root@desktop]# mysql -u root -p DB < tb.sql
•创建与查询(CREATE 和 SELECT)

这种方法综合第一种方法的高效和第二种方法的安全。不需要导出整个表的数据,而是首先创建一个新的存储引擎的表,然后利用INSERT…SELECT语法来导数据:

数据量不大使用以下语句:

mysql > CREATE TABLE TB2 like TB1;
mysql > ALTER TABLE TB2 ENGINE=InnoDB;
mysql > INSERT INTO TB2 SELECT * FROM TB1;
数据量大使用以下语句:

mysql > CREATE TABLE TB2 like TB1;
mysql > ALTER TABLE TB2 ENGINE=InnoDB;
mysql > START TRANSACTION;
mysql > INSERT INTO TB2 SELECT * FROM TB1 WHERE id BETWEEN x AND y;
mysql > COMMIT;

PS:这样的操作完成后,新表是原表的一个全量复制,原表还在,如需要可以删除原表。

如果有必要,可以在执行的过程中对原表进行加锁,以确保新表和原表的数据一致。

•使用Percona Toolkit提供的pt-online-schema-change工具:

使用以下命令可将DB库中的TB1表转换成InnoDB:

[root@desktop]# pt-online-schema-change -u root -h 127.0.0.1 -p 123456 –alter=’ENGINE=Innodb’ –execute A=utf8,D=DB,t=TB1

执行成功后会有如下提示:

Successfully altered `DB`.`TB1`.

PS:原理为创建临时表->修改修改结构->记录数据->删掉原表->重命名临时表

TAGS:
12月 11th, 2017

replace into和insert into on duplicate key 区别


replace的用法

当不冲突时相当于insert,其余列默认值
当key冲突时,自增列更新,replace冲突列,其余列默认值

Insert into …on duplicate key的用法

不冲突时相当于insert,其余列默认值
当与key冲突时,只update相应字段值。

实验展示


表结构

create table helei1(
id int(10) unsigned NOT NULL AUTO_INCREMENT,
name varchar(20) NOT NULL DEFAULT ”,
age tinyint(3) unsigned NOT NULL default 0,
PRIMARY KEY(id),
UNIQUE KEY uk_name (name)
)
ENGINE=innodb AUTO_INCREMENT=1
DEFAULT CHARSET=utf8;

表数据

root@127.0.0.1 (helei)> select * from helei1;
+—-+———–+—–+
| id | name | age |
+—-+———–+—–+
| 1 | 贺磊 | 26 |
| 2 | 小明 | 28 |
| 3 | 小红 | 26 |
+—-+———–+—–+
3 rows in set (0.00 sec)

replace into用法

root@127.0.0.1 (helei)> replace into helei1 (name) values(‘贺磊’);
Query OK, 2 rows affected (0.00 sec)

root@127.0.0.1 (helei)> select * from helei1;
+—-+———–+—–+
| id | name | age |
+—-+———–+—–+
| 2 | 小明 | 28 |
| 3 | 小红 | 26 |
| 4 | 贺磊 | 0 |
+—-+———–+—–+
3 rows in set (0.00 sec)
root@127.0.0.1 (helei)> replace into helei1 (name) values(‘爱璇’);
Query OK, 1 row affected (0.00 sec)

root@127.0.0.1 (helei)> select * from helei1;
+—-+———–+—–+
| id | name | age |
+—-+———–+—–+
| 2 | 小明 | 28 |
| 3 | 小红 | 26 |
| 4 | 贺磊 | 0 |
| 5 | 爱璇 | 0 |
+—-+———–+—–+
4 rows in set (0.00 sec)

replace的用法
当没有key冲突时,replace into 相当于insert,其余列默认值
当key冲突时,自增列更新,replace冲突列,其余列默认值

Insert into …on duplicate key:

root@127.0.0.1 (helei)> select * from helei1;
+—-+———–+—–+
| id | name | age |
+—-+———–+—–+
| 2 | 小明 | 28 |
| 3 | 小红 | 26 |
| 4 | 贺磊 | 0 |
| 5 | 爱璇 | 0 |
+—-+———–+—–+
4 rows in set (0.00 sec)

root@127.0.0.1 (helei)> insert into helei1 (name,age) values(‘贺磊’,0) on duplicate key update age=100;
Query OK, 2 rows affected (0.00 sec)

root@127.0.0.1 (helei)> select * from helei1;
+—-+———–+—–+
| id | name | age |
+—-+———–+—–+
| 2 | 小明 | 28 |
| 3 | 小红 | 26 |
| 4 | 贺磊 | 100 |
| 5 | 爱璇 | 0 |
+—-+———–+—–+
4 rows in set (0.00 sec)

root@127.0.0.1 (helei)> select * from helei1;
+—-+———–+—–+
| id | name | age |
+—-+———–+—–+
| 2 | 小明 | 28 |
| 3 | 小红 | 26 |
| 4 | 贺磊 | 100 |
| 5 | 爱璇 | 0 |
+—-+———–+—–+
4 rows in set (0.00 sec)

root@127.0.0.1 (helei)> insert into helei1 (name) values(‘爱璇’) on duplicate key update age=120;
Query OK, 2 rows affected (0.01 sec)

root@127.0.0.1 (helei)> select * from helei1;
+—-+———–+—–+
| id | name | age |
+—-+———–+—–+
| 2 | 小明 | 28 |
| 3 | 小红 | 26 |
| 4 | 贺磊 | 100 |
| 5 | 爱璇 | 120 |
+—-+———–+—–+
4 rows in set (0.00 sec)

root@127.0.0.1 (helei)> insert into helei1 (name) values(‘不存在’) on duplicate key update age=80;
Query OK, 1 row affected (0.00 sec)

root@127.0.0.1 (helei)> select * from helei1;
+—-+———–+—–+
| id | name | age |
+—-+———–+—–+
| 2 | 小明 | 28 |
| 3 | 小红 | 26 |
| 4 | 贺磊 | 100 |
| 5 | 爱璇 | 120 |
| 8 | 不存在 | 0 |
+—-+———–+—–+
5 rows in set (0.00 sec)

总结


replace into这种用法,相当于如果发现冲突键,先做一个delete操作,再做一个insert 操作,未指定的列使用默认值,这种情况会导致自增主键产生变化,如果表中存在外键或者业务逻辑上依赖主键,那么会出现异常。因此建议使用Insert into …on duplicate key。由于编写时间也很仓促,文中难免会出现一些错误或者不准确的地方,不妥之处恳请读者批评指正。

TAGS:
11月 5th, 2017

方法1:

1.停止MySQL服务

# kill `cat /var/run/mysqld/mysqld.pid`

或者

# pkill mysqld

2.创建一个密码赋值语句的文本文件

# vi mysql-init

ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘MyNewPass!6’;

在加载授权表之前重置密码。

3.使用—init-file选项启动MySQL服务

# mysqld –init-file=mysql-init –user=mysql &

4.删除文本文件,使用新密码连接MySQL

# rm -f mysql-init

# mysql -uroot -p ‘MyNewPass!6’

5.停止MySQL服务并正常启动

# kill `cat /var/run/mysqld/mysqld.pid`

# systemctl start mysqld

方法2:

1.停止MySQL服务

# kill `cat /var/run/mysqld/mysqld.pid`

# pkill mysqld

2.使用–skip-grant-tables –skip-networking选项启动MySQL服务

# mysqld –skip-grant-tables –skip-networking –user=mysql

–skip-grant-tables:跳过授权表认证

–skip-networking:加了跳过授权表选项后所有的人都可以无密码登录,这是很不安全的,此选项不监听网络,防止恶意登录。

3.无密码连接MySQL

# mysql

4.重置密码

mysql> FLUSH PRIVILEGES;

mysql> ALTER USER ‘root’@’localhost’ IDENTIFIED BY ‘MyNewPass!6’;

5.停止MySQL服务并正常启动

# kill `cat /var/run/mysqld/mysqld.pid`

# systemctl startmysqld

简单、快捷、有效,记得收藏哦!万一哪天root密码找不到了呢!

TAGS:
10月 30th, 2017

删除:

  1. yum remove mysql mysql-server mysql-devel mysql-libs compat-mysql51 mysql-community-client mysql-community-libs mysql-community-server mysql-community-common mysql-community-release.noarch
  2. rm -rf /var/lib/mysql
  3. rm /etc/my.cnf
  4. rm -rf /var/lib/mysql/
  5. rm -rf /usr/lib64/mysql
  6. rm -rf /usr/lib/mysql
  7. rm -rf /usr/share/mysql
  8. rm –rf /usr/my.cnf
  9. rm -rf /root/.mysql_sercret
  10. chkconfig –del mysqld

验证:

  1. yum list installed mysql*
10月 27th, 2017

数据安全是现在互联网安全非常重要一个环节。而且一旦数据出现问题是不可逆的,甚至是灾难性的。

有一些防护措施应该在前面几个博文说过了,就不再赘述。比如通过防火墙控制,通过系统的用户控制,通过Web应用的控制等。

想说的是,任何一个节点都不是单独存在的。

场景

1、确保应用本身安全。

2、控制系统用户对数据库的访问权限。

3、控制数据库用户对数据库的访问权限。

4、确保数据库敏感数据的安全。

5、确保数据库整个数据的完整性。

6、规范日常运维操作

7、合理的划分业务。

解决方案

应用安全

删除默认的数据库和用户

mysql初始化后会自动生成空用户和test库,这会对数据库构成威胁,我们全部删除。

  1. mysql> drop database test;
  2. mysql> use mysql;
  3. mysql> delete from db;
  4. mysql> delete from user where not(host=”localhost” and user=”root”);
  5. mysql> flush privileges;

禁止数据库从本地直接加载内容

在某些情况下,LOCAL INFILE命令可被用于访问操作系统上的其它文件(如/etc/passwd),应使用下现的命令:

  1. mysql> LOAD DATA LOCAL INFILE ‘/etc/passwd’ INTO TABLE table1
  2. # 更简单的方法是:
  3. mysql> SELECT load_file(“/etc/passwd”)

为禁用LOCAL INFILE命令,应当在MySQL配置文件的[mysqld]部分增加下面的参数:

  1. set-variable=local-infile=0

控制用户的权限

这里用户,指的是数据库里的用户。

控制访问的ip。

只允许信任的ip访问,其他的ip都应该拒绝。

比如:只允许办公网络,还有业务服务器对应的网络可以访问。

区分角色

区分角色,给不同的权限。角色的划分需要根据具体的使用场景。

下面简单举例:

1、角色:view。权限:只允许查询数据,不允许做任何修改。场景:业务正确性验证时

2、角色:update。权限:允许修改数据,但是不允许修改数据结构。场景:程序运行

3、角色:operate。权限:允许修改表结构,允许新增和修改表,不允许删除表,不允许删库。场景:产品要发布的时候才可以使用,通过升级sql方式执行。

4、…..

加密敏感信息

要使用md5,sha等算法加密。这样即使数据丢失,也能减少损失。比如:登录密码,支付密码等。

保证数据的完整性

1、解决单点故障。主从,主主。

2、需要备份与还原。

规范日常操作

1、如果没有特殊需求,应该使用最小的用户。比如只使用查看的用户。

2、有需要修改数据或者结构的操作,可以考虑两人一起。或者可以考虑做成功能,减少人为直接操作数据库。

3、在测试环境上测试OK,才往正式环境执行。

业务的划分

少用数据库

可以通过缓存,静态化。尽可能少的使用数据库。能不使用数据库是最安全。

分库分表

敏感的数据和常用的数据,最好从表的设计上隔离。比如:用户的详情信息和支付信息最好分开。

优化sql

这个也非常重要,往往就是因为不重要sql的优化,所以数据库对应的服务器资源吃满不提供服务。

验证方法

通过不同的账号操作,判断有没有对应的权限。

TAGS:
9月 28th, 2017

背景

平时与开发交流,或在论坛回答问题时,发现这个问题被问及的频率非常高,例如: 程序中报错“MySQL server has gone away”是什么意思? 如何避免? 因此,感觉有必要总结一下发生这个问题的原因。

正好看到一篇外文blog总结的比较好,就翻译过来了,分享给大家。

原因一: MySQL 服务宕了

判断是否属于这个原因的方法很简单,执行以下命令,查看mysql的运行时长:

  1. $ mysql -uroot -p -e “show global status like ‘uptime’;”+—————+——-+
  2. | Variable_name | Value |
  3. +—————+——-+
  4. | Uptime | 68928 |
  5. +—————+——-+
  6. 1 row in set (0.04 sec)

或者查看MySQL的报错日志,看看有没有重启的信息:

  1. $ tail /var/log/mysql/error.log
  2. 130101 22:22:30 InnoDB: Initializing buffer pool, size = 256.0M
  3. 130101 22:22:30 InnoDB: Completed initialization of buffer pool
  4. 130101 22:22:30 InnoDB: highest supported file format is Barracuda.
  5. 130101 22:22:30 InnoDB: 1.1.8 started; log sequence number 63444325509
  6. 130101 22:22:30 [Note] Server hostname (bind-address): ‘127.0.0.1’; port: 3306
  7. 130101 22:22:30 [Note]   – ‘127.0.0.1’ resolves to ‘127.0.0.1’;
  8. 130101 22:22:30 [Note] Server socket created on IP: ‘127.0.0.1’.
  9. 130101 22:22:30 [Note] Event Scheduler: Loaded 0 events
  10. 130101 22:22:30 [Note] /usr/sbin/mysqld: ready for connections.
  11. Version: ‘5.5.28-cll’  socket: ‘/var/lib/mysql/mysql.sock’  port: 3306  MySQL Community Server (GPL)

如果uptime数值很大,表明MySQL服务运行了很久了,说明最近服务没有重启过。 如果日志没有相关信息,也说明MySQL服务最近没有重启过,可以继续检查下面几项内容。

原因2:连接超时

如果程序使用的是长连接,则这种情况的可能性会比较大。 即某个长连接很久没有发起新的请求,达到了server端的time out,被server强行关闭。此后再通过这个client发起查询的时候,就会报错server has gone away。

  1. $ mysql -uroot -p -e “show global variables like ‘%timeout’;”+—————————-+———-+
  2. | Variable_name | Value |
  3. +—————————-+———-+
  4. | connect_timeout | 30 |
  5. | delayed_insert_timeout | 300 |
  6. | innodb_lock_wait_timeout | 50 |
  7. | innodb_rollback_on_timeout | OFF |
  8. | interactive_timeout | 28800 |
  9. | lock_wait_timeout | 31536000 |
  10. | net_read_timeout | 30 |
  11. | net_write_timeout | 60 |
  12. | slave_net_timeout | 3600 |
  13. | wait_timeout | 28800 |
  14. +—————————-+———-+mysql> SET SESSION wait_timeout=5;#Wait 10 secondsmysql> SELECT NOW();
  15. ERROR 2006 (HY000): MySQL server has gone away
  16. No connection. Trying to reconnect…
  17. Connection id: 132361
  18. Current database: *** NONE ***+———————+
  19. | NOW() |
  20. +———————+
  21. | 2013-01-02 11:31:15 |
  22. +———————+
  23. 1 row in set (0.00 sec)

原因3: 进程在server端被主动kill

这种原因和第2种原因比较相似,只是发起者是DBA,或者其他job,发现有长时间的慢查询执行kill xxx导致。

  1. $ mysql -uroot -p -e “show global status like ‘com_kill'”+—————+——-+
  2. | Variable_name | Value |
  3. +—————+——-+
  4. | Com_kill | 0 |
  5. +—————+——-+

原因4: Your SQL statement was too large

当查询的结果集超过 max_allowed_packet 也会出现这样的报错,定位方法是打出相关报错的语句。 用select*into outfile 的方式导出到文件,查看文件大小是否超过max_allowed_packet,如果超过则需要调整参数,或者优化语句。

  1. mysql> show global variables like ‘max_allowed_packet’;
  2. +——————–+———+
  3. | Variable_name | Value |
  4. +——————–+———+
  5. | max_allowed_packet | 1048576 |
  6. +——————–+———+
  7. 1 row in set (0.00 sec)# 修改参数:mysql> set global max_allowed_packet=1024*1024*16;mysql> show global variables like ‘max_allowed_packet’;
  8. +——————–+———-+
  9. | Variable_name | Value |
  10. +——————–+———-+
  11. | max_allowed_packet | 16777216 |
  12. +——————–+———-+
  13. 1 row in set (0.00 sec)
TAGS:
8月 31st, 2017

删除:

[plain] view plain copy
  1. yum remove mysql mysql-server mysql-devel mysql-libs compat-mysql51 mysql-community-client mysql-community-libs mysql-community-server mysql-community-common mysql-community-release.noarch
  2. rm -rf /var/lib/mysql
  3. rm /etc/my.cnf
  4. rm -rf /var/lib/mysql/
  5. rm -rf /usr/lib64/mysql
  6. rm -rf /usr/lib/mysql
  7. rm -rf /usr/share/mysql
  8. rm –rf /usr/my.cnf
  9. rm -rf /root/.mysql_sercret
  10. chkconfig –del mysqld

验证:

[plain] view plain copy
  1. yum list installed mysql*
8月 31st, 2017

下个版本预告:

PHPWAMP下个版本将会集成PHP打包器,可以将PHP网站生成单个EXE文件,双击即可浏览网站。

在打包PHP网站的过程中还可以选择任意PHP版本、Mysql版本、以及Web服务器,敬请期待后续版本吧。

目前的PHPWAMP支持,Nginx、IIS、Apache,支持无限制添加php和Mysql版本同时运行。

下面我们开始讲解一下目前PHPWAMP最新版本如何快速自定义任意的Mysql历史版本

讲解前先回答个小问题,有用户向我询问:PHPWAMP是否可以单独启动某些服务?其实是可以的

可能你们没有注意“服务管理器”这个功能吧,想单独启动某个服务,只需在“服务管理器”操作即可

wKioL1mk5PXSXm0MAAFfCK3Pbhk700.png

(点击图片可查看高清大图)

开始自定义我们的Mysql版本教程,打开软件,选择“相关设置”,然后选“Mysql版本”

wKiom1mk5uqS3CzVAADDM--yKTA288.png

(点击图片可查看高清大图)

想切换Mysql版本可以直接在此切换,默认就集成了Mysql5.5、Mysql5.6、Mysql5.7三个版本了

wKioL1mk6C-z9eJwAABLpBJ_Grc626.png

我们来添加一个Mysql版本,可以到Mysql官方去下载任意Mysql版本,

也可以点击软件这里,进入PHPWAMP提供的Mysql版本下载地址进行下载。

wKiom1mk6JbzuDZSAABRJWK6PCc241.png

我下载的是最新的版本Mysql8,如图所示

wKiom1mk69rAUVELAAB4htiTjR4288.png

下载完成后,我们点击此处给软件添加一个新的Mysql版本

wKioL1mk6VzSt0tfAABRppsWA_s322.png

点击后弹出输入框,可以给你新添加的数据库定义一个版本名称,比如我定义成Mysql8

wKiom1mk6iLAVu6RAAAxFfiW-Bw676.png

输入你定义的版本名称后(名称随意),点击添加按钮

wKiom1mk6oHR8gR6AAAxMskH-i0636.png

点击添加后,看到下图提示后点击“是”打开Mysql版本目录,

wKioL1mk6sLxVT3XAABVtnsXtCI184.png

在打开的新文件夹中,我们把刚才下载好的压缩包解压后,放到这里面即可,

不用理会是否有my.ini文件,后面会自动生成的,当然后期最好根据你的需求修改一下配置。

wKioL1mk7rqhA4k7AADwFogV37s571.png

(点击图片可查看高清大图)

然后就可以在Mysql版本列表看到我们刚才定义的Mysql8这个最新的Mysql数据库版本了。

wKioL1mk6ySAuK3XAAA2PYp3MLo417.png

最后就可以选择最新版本Mysql8,然后点击切换了

wKiom1mk643w5uhRAABODgMSP0M959.png

点击切换后,高版本Mysql会提示初始化,如果出现初始化提示,点击“是”即可,如图

wKiom1mk75aCofTrAAAxiDVB3zE196.png

很快就会提示成功,整个过程不到一秒

wKiom1mk787gMOvaAAAo9JIj9cA307.png

初始化成功后,再选择Mysql8,然后点击切换就能正常启动了

(有的Mysql版本不需要初始化,需不需要程序会自动判断的)

wKiom1mk643w5uhRAABODgMSP0M959.png

点击切换,提示切换成功,切换的同时也将启动Mysql

wKiom1mk8DPwJsP-AAA7gkuuvOE440.png

我们回到主界面,发现新定义的Mysql启动成功,鼠标移动到这里就会显示Mysql8以及当前端口号3306

wKioL1mk8L3SgfuoAACTzUZURBk724.png

这个时候我们发现,虽然新定义的Mysql数据库正常启动了,但是数据库密码并不知道!

到了这一步,我们可以使用常用工具的“强制修改数据库密码”功能改个你想要的密码

wKiom1mlAWTixeIAAAFYLplmoIs315.png

这里分成两部分,上面是修改当前自身的Mysql密码,下面的是修改其他环境

的Mysql数据库密码,而我们现在是要修改当前启动的最新版Mysql数据库密码,

因此只需要填写上面的即可,我输入的密码是168168,输入完毕后点击修改即可

wKiom1mlAXWR8E2WAABZrtFbku8539.png

密码修改成功后,在主界面点击管理数据库,或者在站点管理列表右键站点打开也可以

wKiom1mlBJDy_bbVAACo6ZcXvdo821.png

使用内置的phpmyadmin数据库管理工具登陆Mysql数据库,输入刚才修改的数据库密码。

wKioL1mlAW3CKa3AAABrTGG0fyk761.png

登陆成功,可以看到当前的Mysql版本是最新的,如下图所示

注意:每次切换Mysql版本,下图这个界面必须清除浏览器缓存才能正确显示当前Mysql版本

wKiom1mlAYyxEKqcAABg0NrMz2k542.png

题外话:

回到刚才的Mysql文件夹,如果找不到可以点击菜单,“编辑文件-Mysql各版本文件夹所在目录”。

如下图,我们看到新的版本Mysql8文件夹生成了两个新文件,一个是mysql配置,一个是data文件

友情提示:为了兼容所有系统,默认生成的my.ini是可以支持内存很小的系统的,可自行调整。

其他建议:如果你用的是其他的php集成环境,当服务器内存很小时你的数据库可能无法启动,

这时候可以适当增加虚拟内存或者直接用PHPWAMP生成的my.ini覆盖掉你原来环境的数据库配置。

wKiom1mk8TjSt1irAACSx3QX-T0987.png

Mysql自定义功能的其他妙用:

如果你原来用的是其他集成环境,但是现在想改用PHPWAMP,其实转移也很简单,

点击切换PHP版本,随意切换一个属于Apache2.4的php版本,如图标明的apache2.4即可

这三个php版本后面都标明了是apache2.4,所以随意启动这三个PHP版本就切换到Apache2.4了

wKiom1mk83mwWeTKAACwnndUSu0273.png

如图,只要这里显示Apache2.4,就说明能使用Apache2.4站点管理了

wKiom1mk9F_h-HERAACfzYor4hY884.png

切换到Apache2.4才可以使用Apache2.4站点管理,我们打开Apache2.4站点管理

wKiom1mk9AaxK7BwAAH3PA5WMu0983.png

如图,站点管理功能强大,添加站点可以随意指定任何PHP版本和自定义

我们添加站点的时候,只需要把根目录设置成你原来网站源码的文件夹即可

wKioL1mk9KDQtjmVAAB0AVsv_-0258.png

(点击图片可查看高清大图)

网站源码搬迁完毕,轮到网站数据库了,数据库可以直接sql导出导入,如果嫌麻烦可以用自定义Mysql功能,把原来你环境的Mysql数据库集成到PHPWAMP里面即可,方法和前面我讲解的自定义Mysql版本是一样的,只需要注意设置my.ini就可以了,如果不想修改原先环境的my.ini,直接删掉即可,区别如下。

吸纳其他集成环境的Mysql数据库和自定义Mysql的区别:

区别:大部分步骤是一样的,只需要把原来集成环境重Mysql目录的my.ini删掉即可(会自动生成)

提示:如不想删掉原环境my.ini配置,只需修改my.ini配置里面的路径即可,路径正确才能正常启动。

TAGS: