安装MySQL

研究数据当然离不开数据库啦~~我是从数据库起家的,所以我会介绍一些数据库在数据科学中的一些作用。我用了很多DB2,DB2确实很不错,但是作为起步我还是选择MySQL。以后我想我会写一些关于DB2的文章,之前DB2大多在MainFrame上使用。 OK,长话短说。一般设置一个可用数据库(优化不在这里讨论),可用遵循以下几个步骤:

安装 Install MySQL 允许远程访问 Allow remote access 开始服务 Start the MySQL service 设置根密码 Set the root password 查看用户 View users 用户主机 User hosts 匿名用户 Anonymous users 建立数据库 Create a database 增加数据库用户 Add a database user 设置用户权限 Grant database user permissions

Install MySQL

直接看指令:

sudo apt-get update
sudo apt-get install mysql-server

安装完成后执行以下命令进行安全设置,当然在安装期间系统会要求您输入root密码,root密码可以为空。以后每次进行安全设置都可以运行以下脚本。

/usr/bin/mysql_secure_installation

Allow remote access

你可以通过以上命令设置是否允许用户远程访问,但是对于本地防火墙的话需要开启3306端口作为MySQL的远程访问端口,当然你可以通过命令或者修改my.cnf 来修改端口。

sudo iptables -I INPUT -p tcp --dport 3306 -m state --state NEW,ESTABLISHED -j ACCEPT
sudo iptables -I OUTPUT -p tcp --sport 3306 -m state --state ESTABLISHED -j ACCEPT

Start the MySQL service

既然安装好了我们先进入MySQL试试。首先要启动MySQL服务。

sudo service mysql start

Launch at reboot

为了避免每次重启之后要再手动启动MySQL服务。我们可以把它加到随系统启动的服务列表中

sudo /usr/sbin/update-rc.d mysql defaults

Start the mysql shell

好啦,下面我们开始启动MySQL

mysql -u root -p

最后说一下关于MySQL启动的几个参数,一条完整的启动命令像这样 :

mysql -h localhost -u root -p

其中-h 是host地址,本地的话是localhost,远程是IP地址,-u是MySQL用户,-p是密码。

Set the root password

有很多种方法设置密码,包括后面的设置用户也可以用。这里我介绍如何在数据库内部通过命令设置密码。

UPDATE mysql.user SET Password = PASSWORD(‘password’) WHERE User = ‘root’;

我们可以发现密码储存在了mysql数据库中的user table中。所以要求修改者必须要有管理员权限。

接下来我们刷新下privileges:

FLUSH PRIVILEGES;

View users

如上所述:我们在mysql.user中查看所有用户

select user,host from mysql.user;

其中password filed是加密的,所以查看没有意义。

show grants for 'root'@'%';

然后用这条命令可以查看用户的权限,其中百分号代表所有位置(本地和远程)的权限。

Create a database

CREATE DATABASE demodb;

Add a database user

既然知道了user表可以对用户进行操作,我们可以直接在表中添加用户字段,但是只有系统管理员才可以,不建议这么做

INSERT INTO mysql.user (User,Host,Password) VALUES('demouser','localhost',PASSWORD('demopassword'));

一般我们用下面这条:

CREATE USER 'demouser'@'localhost' IDENTIFIED BY 'demopassword';
FLUSH PRIVILEGES;

Grant database user permissions

接下来设置用户权限。注意权限包括用户权限和数据库和表的访问权限,目前我们只针对用户权限,数据库和表的权限我们在安全或者优化的部分再介绍

GRANT ALL PRIVILEGES ON demodb.* to demouser@localhost;
FLUSH PRIVILEGES;

以下是不同的用户权限介绍:

ALL PRIVILEGES- as we saw previously, this would allow a MySQL user all access to a designated database (or if no database is selected, across the system) CREATE- allows them to create new tables or databases DROP- allows them to them to delete tables or databases DELETE- allows them to delete rows from tables INSERT- allows them to insert rows into tables SELECT- allows them to use the Select command to read through databases UPDATE- allow them to update table rows GRANT OPTION- allows them to grant or remove other users’ privileges

一般来说:

增加用户权限:

GRANT [type of permission] ON [database name].[table name] TO ‘[username]’@'localhost’;
解除用户权限:

REVOKE [type of permission] ON [database name].[table name] FROM ‘[username]’@‘localhost’;
删除用户:

DROP USER ‘demo’@‘localhost’;

删除用户: DROP USER ‘demo’@‘localhost’;

配置MySQL

MySQL 的配置文件主要安装在此路径之下

/etc/mysql

我们可以用MySQL自带的帮助命令寻找到所需要的帮助文件

mysqld --help --verbase

my.cnf & mysqld.cnf

这是很重要的一个MySQL的配置文件,建议修改之前最好做好备份。 之前版本的配置会放在my.cnf中,但是有的也会放在mysqld.cnf中。我使用的是Ubuntu Linux16.06版本。通过apt-get命令安装的server。设置在

/etc/mysql/mysql.conf.d/mysqld.cnf

这是因为服务器版本不同所造成的配置文件位置不一样,但是里面内容都是相似的。

配置用户组

在 [client] 或者 [mysqld] 参数上可以噢诶之用户组,未来的cluster配置将会详细介绍 注意client 用来配置MySQL client,mysqld用来配置 MySQL server。

Log files

MySQL 默认的日志文件的位置在:

/var/log/mysql

如果你找不到日志文件,在my.cnf中会有日志文件的位置

log_error = /var/log/mysql/error.log

网络设置

MySQL默认端口是3306,如果你想改变端口。需要在my.cnf中改变以下设置

[client]
port = 3306

[mysqld]
port = 3306

另外,如果你使用MySQLcluster,需要将IP地址由127.0.0.1 改为本机的IP地址

[mysqld]
bind-address = 127.0.0.1

mysqld and mysqld_safe

有两种设置MySQL服务器的命令,mysqld 和 mysqld_safe, 两个命令很像,区别是mysqld_safe 自动开启了一些安全的功能,这样有助于当系统崩溃时候恢复和备份。

另外。mysqld和mysqld_safe同时可以进入mysqld section. 但是只有mysqld_safe可以进入mysqld_safe section。MySQL自动开启了mysqld_safe section。

mysqladmin

这是一个很好的MySQL自带的系统管理工具。这里不介绍了,各位可以参考MySQL手册 mysqladmin

Backups

备份包括备份服务器配置,日志和数据库。可以用直接copy配置文件和mysqldump两种方法

file copy

默认的MySQL数据库存放在以下路径:

/var/lib/mysql

为了避免在你备份时数据库进行读写操作造成死锁,我们先对数据库加只读锁,然后解锁

mysql -u root -p -e "FLUSH TABLES WITH READ LOCK;"
# when you finish backup
mysql -u root -p -e "UNLOCK TABLES;"

可以使用 “ -e ” 在Linux中运行MySQL命令

mysql -u root -p"password" -e "FLUSH TABLES WITH READ LOCK;"
mysql -u root -p"password" -e "UNLOCK TABLES;"

mysqldump

mysqldump是一个很好的马上要去了备份工具,mysqldump将会生成一份SQL语句文件将数据库备份。 你也可以将数据库备份成csv或者xml格式的文件。内容都是一样的。

mysqldump -u root -p demodb > dbbackup.sql

Restore from mysqldump

可以用mysqldump工具来恢复备份,但是我喜欢用mysql命令直接恢复备份去另一个数据库。

mysql -u root -p demodb < dbbackup.sql

注意,这里的恢复是将备份添加到现有的数据库中,也就是说必须事先建立好数据库在恢复备份之前,另外如果存在的数据库中已经有了内容,恢复将会添加备份进数据库而不是覆盖,你可以用“–add-drop-table”选项来设置表的恢复。

Database engine

这里我简单介绍一下MySQL的引擎,在以后的文章中我会详细介绍不同的数据库引擎。

MySQL主要使用两个数据库引擎,MyISAM和InnoDB。可以通过以下命令查看每个表使用的引擎。

SHOW TABLE STATUS FROM demodb;

MySQL默认使用InnoDB作为引擎,可以增加下面几个参数改变InnoDB设置

innodb_buffer_pool_size = 32M
innodb_log_file_size = 8M
innodb_thread_concurrency = 8
innodb_file_per_table

好啦,现在所有的MySQL配置工作都完成啦,下面就可以使用了!!