修改目录后MySQL无法启动
这种问题一般是selinux造成的
1、终端输入sestatus,如出现SELinux status: enabled,则selinux为开启状态,
2、编辑/etc/selinux/config 文件,将SELINUX=enforcing改为SELINUX=disabled,重启机器
修改密码
修改密码分为两种情况,一种情况是拥有原来密码,另外一种情况则是忘记密码
拥有原来的myql的root的密码;
方法一:
在mysql系统外,使用mysqladmin
# mysqladmin -u root -p password "test123"
Enter password: 【输入原来的密码】
方法二:
通过登录mysql系统,
# mysql -uroot -p
Enter password: 【输入原来的密码】
mysql>use mysql;
mysql> update user set password=password("test") where user='root';
mysql> flush privileges;
mysql> exit;
忘记原来的myql的root的密码;
首先,你必须要有操作系统的root权限了。要是连系统的root权限都没有的话,先考虑root系统再走下面的步骤。
类似于安全模式登录系统,有人建议说是pkill mysql,但是我不建议哈。因为当你执行了这个命令后,会导致这样的状况:
/etc/init.d/mysqld status
mysqld dead but subsys locked
这样即使你是在安全模式下启动mysql都未必会有用的,所以一般是这样/etc/init.d/mysqld stop,如果你不幸先用了pkill,那么就start一下再stop咯。
# mysqld_safe --skip-grant-tables &
&,表示在后台运行,不再后台运行的话,就再打开一个终端咯。
# mysql
mysql> use mysql;
mysql> UPDATE user SET password=password("test123") WHERE user='root';
mysql> flush privileges;
mysql> exit;
本来mysql是不分大小写的,但是这个是修改的mysql中的mysql数据库的具体的值,要注意到。
插入10万条记录的SQL
drop table if exists foo;
create table foo
(
id int unsigned not null auto_increment primary key,
val smallint unsigned not null default 0
)
engine=innodb;
drop procedure if exists load_foo_test_data;
delimiter #
create procedure load_foo_test_data()
begin
declare v_max int unsigned default 100000;
declare v_counter int unsigned default 0;
truncate table foo;
start transaction;
while v_counter < v_max do
insert into foo (val) values ( floor(0 + (rand() * 65535)) );
set v_counter=v_counter+1;
end while;
commit;
end #
delimiter ;
call load_foo_test_data();
MySQL开启远程访问
- 选择mysql库,选user表 新增用户
mysql> insert into user(Host,User,Password) values('%','用户名(必须是英文数字)','密码');
刷新权限
mysql>flush privileges;
- 授权给新增的用户
mysql> Grant all privileges on *.* to '用户名'@'%' identified by '密码' with grant option;
注释:其中:“ . ”代表所有数据库和表(也就是root权限) 其格式为:数据库名称 . 表名
刷新权限
mysql>flush privileges;
数据库优化十个原则
- 尽量避免在列上进行计算,这样会导致索引失效
select * from t where year(d)>=2011 => select * from t where d>='2011-01-01';
- 使用join时,应该用小结果集驱动大结果集。同时把复杂的join查询拆分成多个query。因为join多个表时,可能导致更多的锁定和堵塞。
- 注意like模糊查询的使用,避免%%。
- 仅列出需要查询的字段,这对速度不会又明显的影响,主要考虑节省内存。
- 使用批量插入语句节省交互。
- limit的基数比较大时使用between。
- 不要使用rand函数获取多条随机记录。
- 避免使用null
- 不要使用count(id),而应该是count(*)
- 不要做所谓的排序操作,而应尽可能在索引中完成排序
- 适当使用联合索引,加快查询速度