从2014年开始,作者主要写了三个Python系列文章,分别是基础知识、网络爬虫和数据分析。

  • Python基础知识系列:Pythonj基础知识学习与提升
  • Python网络爬虫系列:Python爬虫之Selenium+Phantomjs+CasperJS
  • Python数据分析系列:知识图谱、web数据挖掘及NLP

  

随着人工智能和深度学习的风暴来临,Python变得越来越火热,作者也准备从零学习这些知识,写相关文章。本篇文章讲解阿里云服务器CentOS系统连接远程MySQL数据库及配置过程,同时教大家如何编写Python操作MySQL数据库的基础代码,为后面的网络爬虫并存储至服务器打下基础。

文章非常基础,希望这系列文章对您有所帮助,如果有错误或不足之处,还请海涵~

系列文章:
[CentOS Python系列] 一.阿里云服务器安装部署及第一个Python爬虫代码实现
[CentOS Python系列] 二.pscp上传下载服务器文件及phantomjs安装详解
[CentOS Python系列] 三.阿里云MySQL数据库开启配置及SQL语句基础知识

参考文献:

一. 创建新用户

1.登录root用户,插入新用户
核心代码:
insert into mysql.user(Host,User,Password) value ("localhost","eastmount",password("123456"));

命令如下所示:

mysql> use mysql
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
mysql> insert into mysql.user(Host,User,Password) value ("localhost","eastmount",password("123456"));
Query OK, 1 row affected, 3 warnings (0.00 sec)mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)mysql> select host,user,password from user;
+-------------------------+-----------+-------------------------------------------+
| host                    | user      | password                                  |
+-------------------------+-----------+-------------------------------------------+
| localhost               | root      | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| izm5e2qvb8hl5w1gjowpsxz | root      | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| 127.0.0.1               | root      | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| localhost               |           |                                           |
| izm5e2qvb8hl5w1gjowpsxz |           |                                           |
| localhost               | yxz       | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| localhost               | mysql     | *95FE99470B7B7CAF1E150B16ACCA48CDE7925813 |
| 39.107.105.166          | yxz       | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| 39.107.105.166          | root      | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| %                       | root      | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| localhost               | eastmount | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+-------------------------+-----------+-------------------------------------------+
11 rows in set (0.00 sec)

通过 select host, user, password from user 查看主机、用户和密码,可以看到 (localhost, eastmount, 123456) 已经插入成功。
此时,用户eastmount是可以登录了,通过语句 "mysql -u eastmount -p 123456"。

但是使用该用户创建数据库,报错如下所示,这是需要先进行授权。
mysql> create database douban;
ERROR 1044 (42000): Access denied for user 'eastmount'@'localhost' to database 'douban'

2.root用户登录再授权
核心代码:grant all privileges on *.* to eastmount@localhost identified by "eastmount";

mysql -u root -p
123456use mysql;grant all privileges on *.* to eastmount@localhost identified by "eastmount"; flush privileges;  quit;

但是此时登录会报错,如下所示:
[root@iZ2ze9134z8zlqupc9t6mzZ ~]# mysql -u eastmount -p
Enter password:
ERROR 1045 (28000): Access denied for user 'eastmount'@'localhost' (using password: YES)

此时需要关闭服务器修改eastmount登录密码,重启服务即可。

3.关闭服务器更新登录密码再刷新权限

核心代码:update user set password=PASSWORD("123456") where user="eastmount";

[root@iZ2ze9134z8zlqupc9t6mzZ ~]# service mysqld stop
Stopping mysqld:                                           [  OK  ]
[root@iZ2ze9134z8zlqupc9t6mzZ ~]# mysqld_safe --skip-grant-tables &
[1] 30466
[root@iZ2ze9134z8zlqupc9t6mzZ ~]# 180220 23:53:36 mysqld_safe Logging to '/var/log/mysqld.log'.
180220 23:53:36 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
mysql -u eastmount -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.1.73 Source distributionCopyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| Eastmount          |
| junyun             |
| mysql              |
| test               |
+--------------------+
5 rows in set (0.00 sec)

接下来更新eastmount用户的密码。

mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
mysql> update user set password=PASSWORD("123456") where user="eastmount";
Query OK, 1 row affected (0.00 sec)
Rows matched: 1  Changed: 1  Warnings: 0mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)mysql> quit;

4.重启MySQL服务
核心代码:service mysqld restart

[root@iZ2ze9134z8zlqupc9t6mzZ ~]# service mysqld restart
180220 23:57:47 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
Stopping mysqld:                                           [  OK  ]
Starting mysqld:                                           [  OK  ]
[1]+  Done                    mysqld_safe --skip-grant-tables
[root@iZ2ze9134z8zlqupc9t6mzZ ~]#

5.登录成功数据库操作

mysql> create database 20180220df;
Query OK, 1 row affected (0.00 sec)mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| 20180220df         |
| Eastmount          |
| doubanl            |
| junyun             |
| mysql              |
| test               |
+--------------------+
7 rows in set (0.00 sec)mysql> use 20180220df;
Database changed
mysql> create table student(->     id int not null primary key,->     name varchar(16) not null,->     pwd varchar(20) not null-> );
Query OK, 0 rows affected (0.02 sec)mysql> show tables;
+----------------------+
| Tables_in_20180220df |
+----------------------+
| student              |
+----------------------+
1 row in set (0.00 sec)mysql> insert into student(id,name,pwd) values(1,'yangxiuzhang','111111');
Query OK, 1 row affected (0.00 sec)mysql> select * from student;
+----+--------------+--------+
| id | name         | pwd    |
+----+--------------+--------+
|  1 | yangxiuzhang | 111111 |
+----+--------------+--------+
1 row in set (0.00 sec)
操作界面如下图所示:

二. 远程服务器授权及端口开启

但此时连接远程数据库,仍然报错“2003-can't connect to MySQL server on (10060)”。

这是需要开启远程服务器并进行公网IP授权,同时开发3306端口号,流程如下:

(一) CentOS开通MySQL3306端口

1.vi /etc/sysconfig/iptables

2.加入如下代码,核心: -I INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT

#Firewall configuration written by system-config-firewall
#Manual customization of this file is not recommanded.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

3.保存退出

4.重启防火墙:service iptables restart

[root@iZ2ze9134z8zlqupc9t6mzZ ~]# service iptables restart
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Unloading modules:                               [  OK  ]
iptables: Applying firewall rules:                         [  OK  ]

注意:开放的端口一定要添加到 REJECT 之前。

(二) 开启远程访问权限

1.mysql -u eastmount -p 123456

2.查询主机、用户名和密码:select host,user,password from user;

3.授权:grant all privileges on *.* to eastmount@39.107.105.166 identified by "123456" with grant option;

mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -ADatabase changed
mysql> grant all privileges on *.* to eastmount@39.107.105.166 identified by "123456" with grant option;
Query OK, 0 rows affected (0.00 sec)mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)mysql> select host,user,password from user;
+-------------------------+-----------+-------------------------------------------+
| host                    | user      | password                                  |
+-------------------------+-----------+-------------------------------------------+
| localhost               | root      | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| izm5e2qvb8hl5w1gjowpsxz | root      | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| 127.0.0.1               | root      | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| localhost               |           |                                           |
| izm5e2qvb8hl5w1gjowpsxz |           |                                           |
| localhost               | yxz       | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| localhost               | mysql     | *95FE99470B7B7CAF1E150B16ACCA48CDE7925813 |
| 39.107.105.166          | yxz       | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| 39.107.105.166          | root      | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| %                       | root      | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| localhost               | eastmount | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
| 39.107.105.166          | eastmount | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |
+-------------------------+-----------+-------------------------------------------+
12 rows in set (0.00 sec)
可以看到主机host为39.107.105.166,用户名为eastmount,密码为123456的已经添加。

但仍然报错“1045 - Access denied for user 'eastmount' (using password: YES)”。

4.为eastmount@'%'用户授权

grant all privileges on *.* to eastmount@'%' identified by "123456" with grant option;

flush privileges;

service mysqld restart

此时权限开启成功,同时服务器的3306端口开启。

三. 阿里云服务器安全设置

如果现在您仍然无法通过阿里云主机CentOS连接远程MySQL数据库,那您需要设置阿里云的安全组规则,而网上更多的资料忽略了该步骤。下面进行简单叙述:

第一步:打开阿里云服务器管理控制台页面,点击“管理”按钮

第二步:在弹出的页面中,选择“本实例安全组”,然后点击“配置规则”

第三步:在弹出如下界面中点击“添加安全组规则”

第四步:在“添加安全组规则”界面选择“MySQL(3306)”,其中3306是MySQL数据库的端口号,同样可以设置其他的端口。

第五步:授权对象填写“0.0.0.0/0”,表示允许任意公网IP登录。

设置成功如下图所示:

第六步:Navicat for MySQL软件登录,输入IP地址、用户名和密码,如下所示。

查看20180220df数据库的student表如下所示:

参考阿里云官方文档:阿里云服务器安全组设置 - 应用案例

四. Python简单操作数据库

下面简单给出pymsql库操作MySQL数据库的Python代码,这是查询功能。

#!usr/bin/python
#coding: utf-8
#author: yxz
import pymysql#创建连接
con = pymysql.Connect(host='localhost', user='yxz', passwd='123456', db="Eastmount")
#创建游标
cur = con.cursor()
#执行SQL语句
cur.execute("select * from douban;")
#获取所有执行结果
res = cur.fetchall()
print(res)
#执行语句提交
con.commit()
cur.close()
#关闭连接
con.close()

如果需要连接远程服务器的Python代码如下所示:

#!usr/bin/python
#coding: utf-8
#author: yxz
import pymysql#创建连接
con = pymysql.Connect(host='39.107.105.166', user='eastmount', passwd='123456', db="20180220df")
#创建游标
cur = con.cursor()
#执行SQL语句
cur.execute("insert into student(id,name,pwd) values('2','eastmount','20180222')")
cur.execute("select * from student;")
#获取所有执行结果
res = cur.fetchall()
print(res)
#执行语句提交
con.commit()
cur.close()
#关闭连接
con.close()

运行结果如下所示:

[root@iZ2ze9134z8zlqupc9t6mzZ eastmount]# python test.py
((1, 'yangxiuzhang', '111111'), (2, 'eastmount', '20180222'))
[root@iZ2ze9134z8zlqupc9t6mzZ eastmount]#

总之,希望这篇基础文章对您有所帮助,尤其是刚接触云服务器的新手,如果您是高手,还请多提意见,共同提高。祝大家新年快乐,又一年过去了,娜我们来年一起进步加油。 
( By:Eastmount CSDN 2018-02-22 中午11点 http://blog.csdn.net/Eastmount )

[CentOS Python系列] 四.阿里云服务器CentOS连接远程MySQL数据库及pymsql相关推荐

  1. [CentOS Python系列] 六.阿里云搭建Django网站详解

    本篇文章主要介绍讲述部署阿里云服务器Django网站环境,并通过IP地址访问网页的过程.写代码过程中往往第一步需要解决的就是配置开发环境,对于新手来说,这是非常头疼的事情,而当配置好之后或者对于老手来 ...

  2. [CentOS Python系列] 五.阿里云部署web环境及通过IP地址访问服务器网页

    假设我们服务器CentOS系统已经部署好了,现在我们需要向服务器上传一个HTML主页,通过IP地址展示我们的内容,如何实现呢?本篇文章主要介绍讲述部署阿里云服务器web环境,并通过IP地址访问网页的过 ...

  3. [CentOS Python系列] 三.阿里云MySQL数据库开启配置及SQL语句基础知识

    从2014年开始,作者主要写了三个Python系列文章,分别是基础知识.网络爬虫和数据分析. Python基础知识系列:Pythonj基础知识学习与提升 Python网络爬虫系列:Python爬虫之S ...

  4. [CentOS Python系列] 一.阿里云服务器安装部署及第一个Python爬虫代码实现

    从2014年开始,作者主要写了三个Python系列文章,分别是基础知识.网络爬虫和数据分析. Python基础知识系列:Pythonj基础知识学习与提升 Python网络爬虫系列:Python爬虫之S ...

  5. 物联网平台搭建的全过程介绍(十)阿里云服务器ESC上安装MySQL数据库

    目录 一.MySQL数据库简介 二.MySQL数据库安装 步骤1.运行以下命令更新YUM源 步骤2.运行以下命令安装MySQL 步骤3.运行以下命令查看MySQL版本号 三.MySQL数据库配置 步骤 ...

  6. 阿里云mysql本地可以连接数据库_本地电脑连接阿里云服务器上搭建的MySQL数据库...

    一.前言 在上一篇博客:在CentOS 7 下安装mysql5.7 我们在阿里云服务器上安装好了MySQL 5.7.那么怎样可以使我们在本地的 navicat for MySQL工具上连接并进行数据库 ...

  7. 阿里云服务器CentOS搭建

    一. 阿里云服务器CentOS搭建 阿里云的CentOS云系统是一个集成了Python环境基于yum安装的镜像,包含Nginx.MySQL.Pyenv.IPython等. CentOS(Communi ...

  8. mac SCp上传文件到阿里云服务器centos

    1.mac链接远程阿里云服务器centos命令: ssh -A -p 22 root@ip 2.mac上传文件到阿里云centos: 3.阿里云服务器weapps下文件删除命令: 4.上传文件相关 m ...

  9. 阿里云服务器CentOS部署Minio服务实现远程访问

    阿里云服务器CentOS部署Minio服务实现远程访问 1.下载 1.1 建立文件夹 mkdir /usr/local/minio mkdir /usr/local/minio/data 1.2下载 ...

最新文章

  1. tensorflow tf.Variable 的用法
  2. 移动互联网,安全厂商新战场
  3. 嵌入式java闹钟 实验报告_《Java程序设计》第五次实验实验报告
  4. Spring Cloud Gateway 原生的接口限流该怎么玩
  5. 数据库使用--MySQL: InnoDB 还是 MyISAM?
  6. C# 特性(attribute)
  7. Redis事务与MySQL事务的区别
  8. 物联网工程实践第二次课堂笔记
  9. 解决: 您目前无法访问 因为此网站使用了 HSTS。网络错误和攻击通常是暂时的,因此,此网页稍后可能会恢复正常。
  10. Spring Boot 启动类真的是XXApplication?
  11. jlabel字怎么变化_宝宝起名字一定要从《康熙字典》中找字!好名字来自文化的传承...
  12. 网络安全实验室 综合关 解析
  13. asp.net-DirectoryEntry基本操作入门
  14. archlinux 触摸板设置
  15. 软件项目管理EAC、ETC的计算
  16. If python is on the left-most side of the chain, that‘s the version you‘ve asked for.
  17. Mac mini M1使用简单体验(编程、游戏、深度学习)
  18. mysql 设置 sql_mode
  19. 关于ping以及TTL的分析
  20. IBM SPSS Statistics 与用户自定义 Python 模块的集成及分析

热门文章

  1. MemSQL初体验 - (1)传说中速度最快的关系数据库软件
  2. 批处理如何清除文本文档里面的重复行
  3. 读《三体Ⅱ · 黑暗森林》| 人能相互理解的前提是力量对等
  4. TMD 这个写笔记的号,盗了有意思吗
  5. How to hide index.php on nginx
  6. ios NSComparator 三种枚举类型
  7. 编程范式,程序员的编程世界观(转)
  8. 基于GDI+用C#编写的.NET流程图控件开发周记(2011-08-28)
  9. 趣味编程:C#中Specification模式的实现(参考答案 - 下)
  10. 实验7.3 字符串 7-8 删除重复字符