您的位置:首页 > 数据库 > MySQL

第 四 十 三 天:mysql 的 相 关 问 题

2015-10-28 10:36 537 查看
小Q:梦想着诗一般的日子,时而简单,时而精致;处在歌一般的生活,时而
靠谱,时而不着调。
======================================================================

mysql在指定IP上启动端口-----------------------------------------
只需在my.cnf中的[mysqld]字段中加入一行
bind-addr = 1.1.1.1
同一台MySQL服务器启动多个端口------------------------------------

可以查看安装说明书,具体步骤如下:
先安装,因为多个端口,所以要根据配置文件来初始化多个数据库
比如有两个,则要运行两次
./scripts/mysql_install_db --datadir=/home/mysql1 --user=mysql
./scripts/mysql_install_db --datadir=/home/mysql2 --user=mysql
配置文件要编辑成这样

[mysqld0]
port            = 3300
socket          = /tmp/mysql0.sock
pid-file        = /home/mysql0/localhost.localdomain0.pid
datadir         = /home/mysql0
#log            = /data/mysql0/mysql0.log
user            = mysql
skip-locking
skip-name-resolve
#skip-bdb
#skip-innodb
key_buffer = 128M
max_allowed_packet = 1M
table_cache = 864
sort_buffer_size = 1M
read_buffer_size = 512K
read_rnd_buffer_size = 1M
myisam_sort_buffer_size = 32M
thread_cache_size = 16
query_cache_size = 32M
thread_concurrency = 8
#skip-networking
wait_timeout=8
max_connections=512
max_connect_errors = 10000000
max_user_connections=20
#slow_queries=/data/mysql0slowquer.sql
#log_slow_queries=/data/mysql0slowquer.sql
#long_query_time=3
#log-bin=mysql0-bin
###########################
[mysqld1]
port            = 3301
socket          = /tmp/mysql1.sock
pid-file        = /home/mysql1/localhost.localdomain1.pid
datadir         = /home/mysql1
#log            = /data/mysql1/mysql1.log
user            = mysql
skip-locking
skip-name-resolve
#skip-innodb
#skip-bdb
key_buffer = 128M
max_allowed_packet = 1M
table_cache = 864
sort_buffer_size = 1M
read_buffer_size = 512K
read_rnd_buffer_size = 1M
myisam_sort_buffer_size = 32M
thread_cache_size = 16
query_cache_size = 32M
thread_concurrency = 8
#skip-networking
wait_timeout=8
max_connections=512
max_connect_errors = 10000000
max_user_connections=20
#log_slow_queries=/data/mysql1slowquer.sql
#long_query_time=3
#log-bin=mysql1-bin
########################################
把配置文件放在 /etc/my.cnf

最后就该启动了

/usr/local/mysql/bin/mysqld_multi start 0-1 这里的0或1是根据配置文件中"[mysqld0]"来定的。
数据库引擎的种类对比---------------------------------------------

MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。
MyISAM在所有MySQL配置里被支持,它是默认的存储引擎,除非你配置MySQL默认使用另外一个引擎。
MEMORY存储引擎提供“内存中”表。MERGE存储引擎允许集合将被处理同样的MyISAM表作为一个单独的表。就像MyISAM一样,MEMORY和MERGE存储引擎处理非事务表,这两个引擎也都被 默认包含在MySQL中。注释:MEMORY存储引擎正式地被确定为HEAP引擎。
InnoDB和BDB存储引擎提供事务安全表。BDB被包含在为支持它的操作系统发布的MySQL-Max二进制分发版里。InnoDB也 默认被包括在所有MySQL 5.1二进制分发版里,你可以按照喜好通过配置MySQL来允许或禁止任一引擎。
EXAMPLE存储引擎是一个“存根”引擎,它不做什么。你可以用这个引擎创建表,但没有数据被存储于其中或从其中检索。这个引擎的目的是服务 ,在MySQL源代码中的一个例子,它演示说明如何开始编写新存储引擎。同样,它的主要兴趣是对开发者。
NDB Cluster是被MySQL Cluster用来实现分割到多台计算机上的表的存储引擎。它在MySQL-Max 5.1二进制分发版里提供。这个存储引擎当前只被Linux, Solaris, 和Mac OS X 支持。在未来的MySQL分发版中,我们想要添加其它平台对这个引擎的支持,包括Windows。
ARCHIVE存储引擎被用来无索引地,非常小地覆盖存储的大量数据。

CSV存储引擎把数据以逗号分隔的格式存储在文本文件中。

BLACKHOLE存储引擎接受但不存储数据,并且检索总是返回一个空集。

FEDERATED存储引擎把数据存在远程数据库中。在MySQL 5.1中,它只和

MySQL一起工作,使用MySQL C Client API。在未来的分发版中,我们想要让它使用其它驱动器或客户端连接方法连接到另外的数据源。
mysqld_multi stop 不能停掉mysql--------------------------------

使用mysqld_multi start 启动了多个mysql实例,但是mysqld_multi stop 却不能停止,为啥呢?因为你还没有授权呢。
/usr/local/mysql/bin/mysqld_multi stop

但是默认是停不掉的,需要我们做一个授权

grant shutdown on *.* to 'username'@'localhost' identified by 'password'
另外还需要在my.cnf配置文件中加上:

[mysqld_multi]
mysqld = /usr/local/mysql/bin/mysqld_safe
mysqladmin = /usr/local/mysql/bin/mysqladmin
user = username
password = password


======================================练习题========================================

1.如何更改系统环境变量PATH?
vim /etc/profile 加入 PATH=$PATH:/usr/local/mysql/bin

2. 默认mysql安装好后,并没有root密码,如何给root设置一个密码?

mysqladmin -uroot password 'newpass'
3. 如何更改root密码?

mysqladmin -uroot -poldpasswd password 'newpasswd'
4. 如何连接远程的mysql服务器?

mysql -uusername -ppass -hhostip -Pport
5. 如何查看当前登陆mysql的账户?

select user();
6. 在mysql命令行下,怎么切换某个库?
use databasename;
7. 如何查看一个表都有哪些字段?

desc tablename;
8. 如何查看某个表使用的是哪种数据库引擎?

show create table\G;
9. 如何查看当前数据库有哪些队列?

show processlist;
10. 当有很多队列时,如何查看有哪些慢查询?

看慢查询日志,慢查询日志在/etc/my.cnf中设置方法是增加:
log_slow_queries = logname
long_query_time = 1 //查询时间超过1s会记录日志
11. 如何查看当前mysql的参数值?

show variables;
12. 如何不重启mysql服务,更改某个参数?

set global xxx = xxx; 比如
set global wait_timeout = 10;
13. 用什么工具备份数据库?请区分myisam引擎和innodb引擎两种存储引擎的备份。

mysqldump 备份数据库,mysqldump可以备份两种引擎的数据。但是innodb引擎的数据使用xtrabackup工具更快
14. 简单描述myisam和innodb引擎的区别。

innodb不支持fulltext类型索引;
innodb不保存表的行数;
myisam的数据直接存在系统的文件中,而innodb的数据库会事先创建一个数据表空间文件,然后再从这个表空间文件中存数据;
myisam不提供事务支持,InnoDB提供事务支持事务,外部键等高级 数据库功能;
myisam的锁是对整个表锁定,innodb是行锁;
15. 如果你的mysql服务启动不了,而当前终端又没有报错,你如何做?

查看mysql的日志,日志默认在datadir下,以hostname为名字的.err文件
16. 要备份的库字符集是gbk的字符集,为了避免出现乱码的情况,如何在备份和还原的时候指定字符集为gbk?

备份指定 mysqldump --default-character-set=gbk
恢复指定 mysql --default-character-set=gbk
17. 错误日志中,如果出现提示说某个表损坏需要修复,你如何修复这个表呢?

repair table tablename;
18. 备份myisam引擎的数据库时,我们除了使用mysqldump工具备份外,还可以直接拷贝数据库的源数据(.frm, .MYD, .MYI三种格式的数据),其中哪一个文件可以不拷贝?若想恢复该文件,如何做?

.MYI的文件可以不拷贝,恢复的时候,需要修复表,但加上 use_frm, 如
repair table tb1 use_frm;
19. 如果mysql的root密码忘记了如何做?

1) 编辑mysql主配置文件 my.cnf vim /etc/my.cnf
在[mysqld]字段下添加参数 skip-grant
2) 重启数据库服务 service mysqld restart
3) 这样就可以进入数据库不用授权了 mysql -uroot
4) 修改相应用户密码 use mysql;
update user set password=password('your password') where user='root';
flush privileges;
5) 修改/etc/my.cnf 去掉 skip-grant , 重启mysql服务
20. 如何更改mysql的普通账户密码?

update user set password=password('your password') where user='username';
21. mysql的命令历史文件在哪里,为了安全我们其实是可以做一个小处理,不让mysql的命令历史记录在文档中,请想一想如何利用之前我们学过的知识做到?

~/.mysql_history
我们可以这样不保存mysql命令历史: cd ~; rm -f .mysql_history; ln -s /dev/null .mysql_history
22. 如何让mysql的监听端口为3307,而不是默认的3306?

vim /etc/my.cnf
把port = 3306 改为 port = 3307
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  Linux mysql