安装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配置工作都完成啦,下面就可以使用了!!