------------------------------------------------------------------------------------------------------------------------
~~安装完毕~~
-------------------------------------------------------------------------------------------------------------------------------------------
问题解决:
一、数据库安装完毕,我们需要远程连接,出现错误:1130 - Host 'xxx.xxx.xxx.xx' is not allowed to connect to this MySQL serverConnection closed by foreign host.
错误编号:1130
问题分析:MySQL 没有开放远程登录的权限。
解决方法:
请确认您填写的数据库服务器是否正确,并且授权你这台 web 服务器进行连接,做如下操作:
开启 MySQL 的远程登陆帐号有两大步:
1、确定服务器上的防火墙没有阻止 3306 端口。
MySQL 默认的端口是 3306 ,需要确定防火墙没有阻止 3306 端口,否则远程是无法通过 3306 端口连接到 MySQL 的。
如果您在安装 MySQL 时指定了其他端口,请在防火墙中开启您指定的 MySQL 使用的端口号。
如果不知道怎样设置您的服务器上的防火墙,请向您的服务器管理员咨询。
2、增加允许远程连接 MySQL 用户并授权。
1)首先以 root 帐户登陆 MySQL
在 Linux 主机中在命令提示行下输入下面的命令。
[root@database-server ~]# mysql -u root -p
Enter password:(输入密码)
2)创建远程登陆用户并授权
命令:grant all PRIVILEGES on testdb.* to shanhy@'123.123.123.123' identified by '123456';
上面的语句表示将 testdb 数据库的所有权限授权给 shanhy 这个用户,允许 shanhy 用户在 123.123.123.123 这个 IP 进行远程登陆,并设置 shanhy 用户的密码为 123456 。
下面逐一分析所有的参数:
all PRIVILEGES 表示赋予所有的权限给指定用户,这里也可以替换为赋予某一具体的权限,例如:select,insert,update,delete,create,drop 等,具体权限间用“,”半角逗号分隔。
testdb.* 表示上面的权限是针对于哪个表的,testdb 指的是数据库,后面的 * 表示对于所有的表,由此可以推理出:对于全部数据库的全部表授权为“*.*”,对于某一数据库的全部表授权为“数据库名.*”,对于某一数据库的某一表授权为“数据库名.表名”。
shanhy 表示你要给哪个用户授权,这个用户可以是存在的用户,也可以是不存在的用户。
123.123.123.123 表示允许远程连接的 IP 地址,如果想不限制链接的 IP 则设置为“%”即可。
123456 为用户的密码。
使用:grant all PRIVILEGES on *.* to root@'%' with grant option; //赋予任何主机访问数据的权限
执行了上面的语句后,再执行下面的语句,方可立即生效。
flush privileges;
使用如上授权法操作或试用下面的改表法操作:
1. mysql>use mysql;
2. mysql>update user set host = '%' where user = 'root';
3. mysql>select host, user from user;
二、修改mysql配置文件,调整数据库编码和表名大小写问题
1、修改配置
在[client]下增加
default-character-set=utf8
在[mysqld]下增加
init-connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_general_ci
#(注意linux下mysql安装完后是默认:区分表名的大小写,不区分列名的大小写;lower_case_table_names = 0 0:区分大小写,1:不区分大小写)
lower_case_table_names=1
#(设置最大连接数,默认为 151,MySQL服务器允许的最大连接数16384)
max_connections=1000
在[mysql]下增加
default-character-set=utf8
PS:这里面本没有什么高深之处,重要一点是要注意版本,网上有不少的修改帖子,都是要在[mysqld]下加上 default-character-set=utf8 ,实际上5.0(>)版本以上是不支持的,如果你这样修改, 你的mysql将不能启动, 报一个错,信息是"上次退出的时候没有保存PID ?? " (大概是这个错误提示)
或是启动时加上参数:mysqld --default-character-set=utf8
或是编译时加上参数:./configure --width-charset=utf8
2、保存(如果你是使用vi来操作,则保存时会报错,因为这个文件是只读属性,可以使用 wq! 强制保存退出)。重启mysql即可。
三. 修改my.cnf配置文件,设置默认引擎为InnoDB,在[mysqld]下面最后增加下面两句。
default-storage-engine = InnoDB
default_table_type = InnoDB
同时打开下面的内容:
innodb_data_home_dir = /var/lib/mysql/
innodb_data_file_path = ibdata1:10M:autoextend
innodb_log_group_home_dir = /var/lib/mysql/
# You can set .._buffer_pool_size up to 50 - 80 %
# of RAM but beware of setting memory usage too high
innodb_buffer_pool_size = 16M
innodb_additional_mem_pool_size = 2M
# Set .._log_file_size to 25 % of buffer pool size
innodb_log_file_size = 5M
innodb_log_buffer_size = 8M
innodb_flush_log_at_trx_commit = 1
innodb_lock_wait_timeout = 50
四. 修改最大连接数,默认是151 ,修改为500
#vi /etc/my.conf
[mysqld]
max_connections=500
验证配置
show variables like 'max_con_%';
五. mysql不能创建函数问题解决
以下是引用片段:
Error Code : 1418
This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its decl