Skip to content

Latest commit

 

History

History
117 lines (94 loc) · 3.52 KB

MariaDB.md

File metadata and controls

117 lines (94 loc) · 3.52 KB

MariaDB 安装及配置

官方下载地址

安装过程(Ubuntu 14.04 LTS "trusty")

$ sudo apt-get install software-properties-common
$ sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db
$ sudo add-apt-repository 'deb [arch=amd64,i386] http://ftp.osuosl.org/pub/mariadb/repo/10.1/ubuntu trusty main'
$ sudo apt-get update
$ sudo apt-get install mariadb-server

MariaDB 服务

$ sudo /etc/init.d/mysql stop
$ sudo /etc/init.d/mysql start
$ sudo /etc/init.d/mysql restart

终端连接客户端

$ mysql -uroot -p

设置MariaDB允许远程访问

使用nestat命令查看3306端口状态:

$ netstat -an | grep 3306
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN

从结果可以看出3306端口只是在IP 127.0.0.1上监听,所以拒绝了其他IP的访问。

解决方法:修改/etc/mysql/my.cnf文件。打开文件,找到下面内容:

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address  = 127.0.0.1

把上面这一行注释掉或者把127.0.0.1换成合适的IP,建议注释掉。

重新启动后,重新使用netstat检测:

$ netstat -an | grep 3306
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN

现在使用下面命令测试:

$ mysql -h 192.168.0.101 -u root -p
Enter password:
ERROR 1130 (00000): Host 'Ubuntu-Fvlo.Server' is not allowed to connect to this MySQL server

结果出乎意料,还是不行。

解决方法:原来还需要把用户权限分配各远程用户。

登录到mysql服务器,使用grant命令分配权限

$ mysql -uroot -p

查看权限

MariaDB [(none)]> SHOW GRANTS \G
*************************** 1. row ***************************
Grants for root@localhost: GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY PASSWORD '*6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9' WITH GRANT OPTION
*************************** 2. row ***************************
Grants for root@localhost: GRANT PROXY ON ''@'%' TO 'root'@'localhost' WITH GRANT OPTION
2 rows in set (0.09 sec)

添加权限

MariaDB [(none)]> GRANT ALL PRIVILEGES ON *.* TO 'zhanghe'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
Query OK, 0 rows affected (0.68 sec)
MariaDB [(none)]> FLUSH PRIVILEGES;
Query OK, 0 rows affected (0.30 sec)

重启服务

$ sudo /etc/init.d/mysql restart

测试服务器本地访问

$ mysql -p123456
MariaDB [(none)]>

测试远程访问

$ mysql -h 192.168.0.101 -u root -p

修改密码(先登录,后重置)

$ mysql -u root -p
MariaDB [(none)]> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('123456');

InnoDB MyISAM 区别

如果你需要事务处理或是外键,那么 InnoDB 可能是比较好的方式。

如果你需要全文索引,那么通常来说 MyISAM 是好的选择,但是通常全文检索有其它的解决方案(例如ES)。

COUNT() 在 MyISAM 表中会非常快,而在 InnoDB 表下可能会很痛苦。

主键查询则在 InnoDB 下会相当相当的快,但需要小心的是如果我们的主键太长了也会导致性能问题。

大批的 inserts 语句在 MyISAM 下会快一些

updates 在 InnoDB 下会更快一些

InnoDB 的表需要更多的内存和存储,转换100GB 的 MyISAM 表到 InnoDB 表可能会让你有非常坏的体验。

所以通常采用 InnoDB 即可