Tag Archive: mysql

三月 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:
一月 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:
十二月 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:
十一月 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:
十月 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*
十月 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:
九月 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:
八月 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*
八月 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:
六月 29th, 2017

这里说的是windows平台下的mysql,linux下本来也不用这么麻烦。

添加、删除服务:
管理员身份运行命令行
{mysql_home}\bin\mysqld –install mysql   /*注册mysql服务*/
{mysql_home}\bin\mysqld –remove mysql   /*注册mysql服务*/

启动、停止服务:管理员身份运行命令行 net start mysql 、net stop mysql

自定义配置:从my-small.ini、my-medium.ini、my-large.ini、my-huge.ini、my-innodb-heavy-4G.ini中选一个适当级别(从轻到重)的配置文件,拷贝成my.ini文件

配置自定义数据目录:在my.ini的[mysqld]节点下增加 basedir= D:/mysql-noinstall-5.5.50-win32 (根目录)、datadir= D:/mysql-noinstall-5.5.50-win32/data (数据文件存放目录),注意不能是\ ,必须是/

初始设定:
{mysql_home}\bin\mysql 不带参数进入是无法管理的,也看不到mysql database,{mysql_home}\bin\mysql -u root进入,use mysql;  即可对初始用户进行设定。
grant all on *.* to root@’%’ identified by “root” with grant option;  /*设定root密码并允许从任意主机访问*/

flush privileges;

设置字符集:

在my.ini的[client]下设置 default-character-set = utf8 ,即可使用命令行窗口正确导入utf-8编码的sql文件(前提是创建数据库时选的字符集也是uft-8),此时对应用来说都是正常的,然而在命令行窗口里显示的是乱码,因为windows命令行窗口不会对中文进行utf-8编码和解码。

同时在[mysqld]下设置 character-set-server=utf8,可使Java代码里的中文正确存取(前提也是创建数据库时选的字符集也是uft-8)。