Mysql安装完成后,想要提高其查询速度以及被其他电脑访问,需要进行一定的设置。
设置优化:
在优化前,先要知道自己的数据库的应用场景,然后才能进行相应的优化。我这边的数据库特点为:
读取为主,千万至亿的量级,不需要外键等限制,不是所有表都有唯一的key当主键。
所以在建表时,为提高读取的效率,我选择MyISAM作为数据库引擎,并在建表时指定某个常用的查询字段建立索引:
CREATE TABLE test (
a VARCHAR(50),
b DOUBLE,
c DATE,
INDEX test_a (a)
)
COLLATE='utf8_general_ci'
ENGINE=MyISAM
;
test表中有a、b、c三个字段,a可能是以后常用来where的字段。目前mysql默认的数据库引擎为InnoDB,如需要更换则需要在代码中明确ENGINE=MyISAM
语句。
在创建好表、导入好数据后,由于数据量较大查询时可能较慢,则进一步对mysql的默认设置进行调整。需要注意的是,Windows下mysql的配置文件仍在C:\ProgramData\MySQL\MySQL Server 5.7\my.ini
中,而在ubuntu16.04下,其配置文件分布在:
/etc/mysql/conf.d/mysql.cnf
/etc/mysql/mysql.conf.d/mysql.cnf
/etc/mysql/my.cnf
文件内就是讲配置文档指向以上两个文档的。以下贴出目前我的设置:
/etc/mysql/conf.d/mysql.cnf:
[mysql]
default-character-set=utf8
[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8
以上就是我之前文章中设置其编码的为utf-8的方法。
/etc/mysql/mysql.conf.d/mysql.cnf:
[mysqld]
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
datadir = /var/lib/mysql
log-error = /var/log/mysql/error.log
# By default we only accept connections from localhost
# bind-address = 127.0.0.1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
max_connections=3000
query_cache_size=0
query_cache_type=0
tmp_table_size=256M
thread_cache_size=128
myisam_sort_buffer_size=2048M
key_buffer_size=2048M
read_buffer_size=8M
read_rnd_buffer_size=128M
innodb_buffer_pool_size=3096M
innodb_log_file_size=512M
innodb_thread_concurrency=8
join_buffer_size=8M
max_allowed_packet=64M
sort_buffer_size=8M
max_connect_errors=6000
以上是我根据http://www.jb51.net/article/83569.htm、http://blog.imdst.com/mysql-5-6-pei-zhi-you-hua/ 的设置,修改了其默认的一些缓存值,提高查询速度。(参考内存为16G,大家要看着自己的内存来设置啊。)
内网访问:
参考:http://www.cnblogs.com/tovep/archive/2012/10/09/2716672.html
http://blog.csdn.net/duck_arrow/article/details/13621935
其实以上/etc/mysql/mysql.conf.d/mysql.cnf
中我出了在下方加了一些设置语句,还做了一个修改,就是# bind-address = 127.0.0.1
。这个语句的作用为绑定访问数据库地址为本机地址,如果要允许其他人访问,则需将这句注释掉。
将这句注释掉之后,想要允许内网访问,还需要进行别的操作:
以root用户登录mysql:
mysql -uroot -p
往保存用户信息的表中添加账户:
GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.0.0/255.255.0.0' IDENTIFIED BY 'yourpassword' WITH GRANT OPTION;
这里我将允许访问的IP限定为192.168.*.*
如果只想某个IP(假定为192.168.1.3)访问,则可将'192.168.0.0/255.255.0.0'
改为'192.168.1.3'
。如果想数据库被任何人访问,则可将其设置为'%'
,当然这很不安全。此外,新版本的mysql中,对'yourpassword'
有一定要求,即你设置的密码不能太简单了,我懒得去解读密码的要求,直接设置了一个比较复杂的密码……(就怕记不住)。
好了,搞定好之后,重启mysql服务:
sudo /etc/init.d/mysql restart
或
sudo service mysql restart
或
sudo service mysql stop
sudo service mysql start
嗯,我是挺无聊的。。。
BTW,Windows下win+R,输入services.msc,找到mysql服务,重启。
好了,可以愉快地用别的机子访问内网的数据库了。