常见问题

如何访问MySQL实例?

  • 命令行操作

通过MySQL Client访问,登录云主机,在命令行中输入:

mysql -h$IP -P$Port -u$User -p$Password

$IP指定MySQL实例的内网IP地址。

$Port指定MySQL实例的端口。

$User指定MySQL实例的管理员名称。

$Password指定MySQL实例的管理员密码。

MySQL实例仅支持通过云主机进行内网登陆。

MySQL实例的安全性如何?

  • 访问安全性

MySQL实例仅支持通过云主机进行内网登陆且按账户进行隔离,因此仅有同一账户的云主机能够对MySQL实例进行登录。

MySQL实例是强制鉴权的,只能通过认证的管理员账户才能访问。

  • 数据安全性

所有的MySQL实例的数据文件所存放的硬盘都进行了RAID1保护。

MySQL实例每天都会进行数据备份,同时也提供了手工备份功能,以便用户能够在特定时间点主动对数据进行备份。

MySQL实例(Master)支持创建从库(搭建在与主库不同的物理机上),从库与主库自动进行数据同步,提供数据灾备的能力。

如何向MySQL实例中导入数据?

  • phpMyAdmin操作

登录phpMyAdmin,切换到“导入”页面,选择本地的数据文件进行导入。

  • 命令行操作

将需要导入的数据文件上传至云主机,在云主机中执行如下命令:

mysql –h$IP -P$Port –u$User -p$Password < data.sql

data.sql是指用户备份文件。

由于通过控制台导入数据有文件大小的限制,因此对于大文件,建议用户使用命令行导入数据。

注意:

Dump源数据库时,仅导出业务相关的库表,请过滤掉mysql/information_schema/performance_schema基础库。

若全库导入,会覆盖MySQL实例原有基础库,影响后续使用。

如果需要导入的数据中存在View或存储过程,需替换掉sql文件里的user@host为拥有正确权限的用户,如’root’@’%’,否则可能无法导入和正常使用。

如何向MySQL实例中导出数据?

以下操作不会锁库:

mysql –h$IP -P$Port –u$User -p$Password --quick --routines --single-transaction --databases db1 db2 db3 > data.sql

single-transaction可以保证InnoDB表的一致性,但MyISAM表无法保证一致性。如果有MyISAM表,可在业务低估时,进行锁库导出:

mysql –h$IP -P$Port –u$User -p$Password --master-data=2 -l –-databases db1 db2 db3 > data.sql

注意:dump导出时仅导出业务相关的库表。

如何创建新用户并授予权限?

  • phpMyAdmin操作

登录phpMyAdmin,点击添加用户,输入用户名、域和密码;如果域为’%’,在主机一栏选择“任意主机”; 如果指定某网段,选择“使用文本域”,然后输入对应的值,再勾选所需权限,完成后,点击“添加用户”即可。

  • 命令行操作

命令行操作请使用grant命令。

例:增加与root同样权限的用户”test@%”,密码123456。

用户使用root账号登陆云数据库,执行show grants,得到root权限语句:

GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,RELOAD,PROCESS,REFERENCES,INDEX,ALTER,SHOW DATABASES,CREATE TEMPORARY 
TABLES,LOCK TABLES,EXECUTE,REPLICATION SLAVE,REPLICATION CLIENT,CREATE VIEW,SHOW VIEW,CREATE ROUTINE,ALTER 
ROUTINE,CREATE USER,EVENT,TRIGGER ON *.* TO 'root'@'%' IDENTIFIED BY PASSWORD '*xxxxxx' WITH GRANT OPTION

将该语句复制下来,然后替换语句中的用户名、域和密码串,执行修改后的授权语句:

GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,RELOAD,PROCESS,REFERENCES,INDEX,ALTER,SHOW DATABASES,CREATE TEMPORARY
TABLES,LOCK TABLES,EXECUTE,REPLICATION SLAVE,REPLICATION CLIENT,CREATE VIEW,SHOW VIEW,CREATE ROUTINE,ALTER
ROUTINE,CREATE USER,EVENT,TRIGGER ON *.* TO 'test'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;

刷新权限表

flush privileges;

QPS是如何统计的?

每分钟都进行一次QPS采样计算,右侧详情页性能监控所展示的曲线为5分钟粒度,若计算所得值小于1,则显示为0。

什么是内存溢出?

内存溢出,Out Of Memory,简称OOM,是指程序在申请内存时,没有足够的内存空间供其使用,出现OOM。

OOM原因:当内存使用超过数据库申请内存时,会按OS的一个规则评分,分数高的进行会Kill掉。

现象:通过控制台监控视图可以看到内存使用陡然下降,异常重启的监控项会出现数据。

可采取措施:确认内存使用参数配置合理,确认是否慢查询过多,确认这些内存是否能满足当前业务。

默认的最大连接数是多少?

综合考虑RDS MySQL服务的性能和稳定性,默认的最大连接数为2000,如果用户有特殊需求,可以上调至5000(5000为mysql云数据库服务提供最大上限)。

如何查看数据库运行状态?

  • 控制台操作

在MySQL实例管理页的列表中选择需查看的MySQL实例,右侧详情页中”性能监控”会展示CPU使用率、磁盘使用率、内存大小、内存使用率、连接数、QPS等监控数据。

  • 命令行操作

查看云数据库运行状况:

show status

查看InnoDB引擎运行状况:

show engine innodb status\G
  • phpMyAdmin操作

登录phpMyAdmin,选择“状态”>”查询统计”,查看数据库的请求频率以及分布情况。

如何查看MySQL实例的SlowLog?

  • 命令行操作

为了便于用户查看SlowLog,MySQL实例设置了log_output=table,会将SlowLog写入mysql.slow_log表中。如果需要查看SlowLog,可以执行:

select * from mysql.slow_log where start_time >= 'xxxx-xx-xx';

如何修改MySQL实例的配置参数?

MySQL实例允许用户导入自定义配置文件对云数据库的相关参数进行修改。具体操作参考操作指南的配置文件章节。

如何安装和卸载插件?

MySQL实例支持安装插件和卸载插件的功能,目前仅开放handlersocket。

  • 命令行操作

执行以下语句安装插件:

install plugin handlersocket soname 'handlersocket.so';

查看当前已安装的插件列表:

show plugins;

卸载插件:

uninstall plugin handlersocket;

如何查看MySQL实例的各项监控指标?

MySQL实例详情页的“监控”中可以查询。

MySQL实例详情页的“监控”中可以查询更多的QPS信息。

是否可以查看云数据库运行状态?

可以。以下以部分语句作为举例:

查看当前连接状态:

show full processlist

查看从库同步状态:

show slave status \G

查看InnoDB状态:

show engine innodb status\G

查看当前参数设置,如wait_timeout:

show global variables like '%wait_timeout%';

默认的配置是针对哪种存储引擎优化的?

针对INNODB优化的,由于MYISAM的并发性能比较差了,建议使用INNODB。

如何在云主机上搭建云数据库从库并进行主从同步呢?

可以在云主机搭建从库,与云数据库进行主从同步。

具体步骤如下:

1、云数据库导出数据:

mysqldump -hxxx -uxxx --quick --routines --master-data=2 --single-transaction --databases db1 db2 db3 > data.sql

对于使用MyISAM存储引擎库表使用:

mysqldump –hxxx –uxxx --master-data=2 -l –-databases db1 db2 db3 > data.sql

2、导入数据:

mysql –hxxx –uxxx –p < data.sql

3、设置同步。

第一步:从库配置文件修改(my.cnf)在[mysqld]下增加参数server-id=1(值与主库不一样即可)

执行service mysqld reload,使修改生效。

第二步:

登陆到主库中授权,执行:

grant replication slave on *.* to username@”x.x.x.x” identified by “xxxx”;
flush privileges;

第三步:

在data.sql中找到change master to,如:

CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000026',MASTER_LOG_POS=33268716;

将此语句复制后,登录从库,并补齐为如下命令

CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.xxx',MASTER_LOG_POS=xxx,MASTER_HOST='X.X.X.X',
MASTER_PORT=XXX,MASTER_USER='XXX',MASTER_PASSWORD='xxx';

PORT默认3306时可以不要指定,然后执行slave start。

查看主从是否建立成功,可以使用:

show slave status\G;

如何正确设置字符集?

浪潮云服务建议用户将所有的字符集都设置为UTF-8,因为utf8兼容绝大部分字符,而统一的字符集设置是避免出现乱码最有效的方式,并且后台的mysqldump等备份工作我们也是统一使用的utf8字符集,并没有检测服务器端的字符集设置,其他的字符集设置可能会导致备份乱码。如果您的项目中有使用到emoji表情,那么建议您将所有的字符集设置成utf8mb4(5.6版本以后支持)。

另外,RDS MySQL不支持设置字符集的校验规则,采用的是对应字符集的默认校验规则,除非您自行在MySQL终端设置(我们非常不建议您这么做)。

出现乱码的原因大概有两个,一是存入的字符集(character_set_client)和取出的字符集(character_set_results)不一致,那么必然会导致乱码;二是虽然存入和取出的字符集一致,但期间有字符集转换,但是这个转换过程并非无损的,那么也有可能导致乱码。所以我们建议您的程序在登陆RDS MySQL时,以utf8为例,先通过这个命令set names utf8来保证character_set_client,character_set_connection和character_set_results均为utf8,并且在配置文件中设置character_set_server,character_set_database,character_set_system均为utf8,在表定义时就可以不指定字符集而采用默认的utf8了,这样就可以完全杜绝乱码问题了。

如何查询MySQL实例的客户端和服务器端版本?

登陆MySQL,执行命令s,首行显示客户端版本,Server version显示服务器端版本。

mysql> s
./mysql Ver 14.14 Distrib 5.6.20-ucloudrel1, for Linux (x86_64) using EditLine wrapper
Connection id: 40491
Current database:
Current user: ucloudbackup@115.239.196.104
SSL: Not in use
Current pager: stdout
Using outfile: ‘’
Using delimiter: ;
Server version: 5.5.24-ucloudrel1-log Source distribution
Protocol version: 10
Connection: 114.119.41.82 via TCP/IP
Server characterset: utf8
Db characterset: utf8
Client characterset: utf8
Conn. characterset: utf8
TCP port: 3370
Uptime: 3 days 8 hours 42 min 18 sec

常见的问题及解决方案