一、查询是否有旧版本
- CentOS6:rpm -qa | grep mysql。对应卸载命令:rpm -e --nodeps mysql-libs
- CentOS7:rpm -qa|grep mariadb。对应卸载命令:rpm -e --nodeps mariadb-libs
- 查看当前版本:mysqladmin --version
二、检查 /tmp 权限
是否是最大,若不是,则执行:chmod -R 777 /tmp。由于mysql安装过程中,会通过mysql用户在/tmp目录下新建tmp_db文件,所以请给/tmp较大的权限。
三、安装(具体根据下载的版本来)在mysql的安装文件目录下执行:
- rpm -ivh MySQL-client-5.5.54-1.linux2.6.x86_64.rpm
- rpm -ivh MySQL-server-5.5.54-1.linux2.6.x86_64.rpm
- 安装完成启动sql后登陆前先设置密码:/usr/bin/mysqladmin -u root password '123123'
- 登陆:mysql -uroot -p123123
- linux下查看安装目录:ps -ef|grep mysql
四、启动、停止、重启
- service mysql start
- service mysql stop
- service mysql restart
- 自启动查询:chkconfig --list|grep mysql
五、字符集及乱码问题解决
- 查看字符集:show variables like 'character%'; 或 show variables like '%char%';
- 查看原库的字符集:show create database mydb
修改乱码:
- 找到my-huge.cnf:cd /usr/share/mysql/
- 拷贝其中的my-huge.cnf 到 /etc/ 并命名为my.cnf:cp my-huge.cnf /etc
- 修改 my.cnf :vim my.cnf 然后在相应的位置添加:[client]default-character-set=utf8 [mysqld] character_set_server=utf8 character_set_client=utf8 collation-server=utf8_general_ci [mysql] default-character-set=utf8
修改数据库的字符集:mysql> alter database mydb character set 'utf8';
修改数据表的字符集:mysql> alter table mytbl convert to character set 'utf8';
但是原有的数据如果是用非'utf8'编码的话,数据本身不会发生改变。
六、创建用户
- 创建用户:create user zhang3 identified by '123123';
- 查看用户:select host,user,password,select_priv,insert_priv,drop_priv from mysql.user;
- 修改当前用户的密码:set password =password('123456')
- 修改某个用户的密码:update mysql.user set password=password('123456') where user='li4';
- flush privileges; #所有通过user表的修改,必须用该命令才能生效。
- 修改用户名:update mysql.user set user='li4' where user='wang5';
- 删除用户:drop user li4。不要通过delete from user u where user='li4' 进行删除,系统会有残留信息保留。
七、授权
- 授权命令:grant 权限1,权限2,…权限n on 数据库名称.表名称 to 用户名@用户地址 identified by ‘连接口令’;该权限如果发现没有该用户,则会直接新建一个用户。比如
grant select,insert,delete,drop on atguigudb.* to li4@localhost ;
#给li4用户用本地命令行方式下,授予atguigudb这个库下的所有表的插删改查的权限。 - grant all privileges on *.* to root@'%' identified by '123';
#授予通过网络方式登录的的joe用户 ,对所有库所有表的全部权限,密码设为123. - 查看当前用户权限:show grants;
- 查看某用户的全局权限:select * from user ;
- 查看某用户的某个表的权限:select * from tables_priv;
- 收回权限命令:revoke 权限1,权限2,…权限n on 数据库名称.表名称 from 用户名@用户地址 ;
- 收回全库全表的所有权限:REVOKE ALL PRIVILEGES ON mysql.* FROM joe@localhost;
- 收回mysql库下的所有表的插删改查权限:REVOKE select,insert,update,delete ON mysql.* FROM joe@localhost;
- 必须用户重新登录后才能生效
其他
- GBK一个汉字占两个字符,UTF-8占三个
- 更新数据库:update lpytable set name='张三' where id=1;
- 查看数据库下用户权限:select * from user\G;
- 查询数据库用户列表:select host,user,password from user;
- sql_mode配置:不配置,则默认允许非法查询,导致查询结果错误。
- 查询sql_mode值:show variables like 'sql_mode';
- 设置sql_mode常用值如下:set sql_mode='ONLY_FULL_GROUP_BY';
MyISAM 和 InnoDB 的区别
- 外键:MyISAM 不支持,InnoDB 支持;
- 事务:MyISAM 不支持,InnoDB 支持;
- 行表锁:MyISAM 是表锁,即使操作一条记录也会锁住整个表,不适合高并发的操作;InnoDB 是行锁,操作时只锁某一行,不对其它行有影响,适合高并发的操作;
- 缓存:MyISAM 只缓存索引,不缓存真实数据;InnoDB 不仅缓存索引还要缓存真实数据,对内存要求较高,而且内存大小对性能有决定性的影响;
- 关注点:MyISAM 节省资源、消耗少、简单业务;InnoDB 并发写、事务、更大资源;
- 都默认安装,MyISAM 默认不使用,InnoDB 默认使用;
- MyISAM 系统自带表使用,InnoDB 系统自带表不使用;