mysql - meetbill/op_practice_book GitHub Wiki
读取第一行
select * frommytable order by IDasc limit 0,1
select * from mytable order by ID desclimit 0,1
select * from mytable order byIDasc limit 0,100
-
-A 同参数 --all-databases,备份所有库,并在备份文件中生成创建库的语句及 use 语句。这样方便恢复时不用创建指定数据库
-
-B 此参数用于指定多个数据库,同 -A 参数,生成创建库的语句及 use 语句。
不指定上述参数时,默认第一个选项为数据库名,如果有第二个及更多选项则为表名
MySQL 数据库,当 innodb 表空间损坏时候,尝试启动数据库不成功,可以使用 innodb_force_recovery 参数进行强制启动
在主配置文件 my.cnf 中添加 innodb_force_recovery=6
innodb_force_recovery 参数解释:
innodb_force_recovery 影响整个 InnoDB 存储引擎的恢复状况,默认值为 0,表示当需要恢复时执行所有的恢复操作。
当不能进行有效的恢复操作时,mysql 有可能无法启动,并记录下错误日志。
innodb_force_recovery 可以设置为 1-6, 大的数字包含前面所有数字的影响。
当设置参数值大于 0 后,可以对表进行 select,create,drop 操作,但 insert,update 或者 delete 这类操作是不允许的。
1(SRV_FORCE_IGNORE_CORRUPT): 忽略检查到的 corrupt 页
2(SRV_FORCE_NO_BACKGROUND): 阻止主线程的运行,如主线程需要执行 full purge 操作,会导致 crash
3(SRV_FORCE_NO_TRX_UNDO): 不执行事务回滚操作。
4(SRV_FORCE_NO_IBUF_MERGE): 不执行插入缓冲的合并操作。
5(SRV_FORCE_NO_UNDO_LOG_SCAN): 不查看重做日志,InnoDB 存储引擎会将未提交的事务视为已提交。
6(SRV_FORCE_NO_LOG_REDO): 不执行前滚的操作。
修复表空间受损的表: 数据起来后,innodb 类型的表不能写操作,但可以读,此时对表做 check,查找到异常的表,读取出来,导入到 myisam 表里面,drop 原表 然后在 my.cnf 中去掉 innodb_force_recovery 的设置,重启 mysql 把 myisam 表转成 innodb 表;
环境:MySQL 5.1 上操作
-
1、关闭原有的默认端口 3306 的 mysql:service mysqd stop
-
2、创建数据文件目录
#创建一个新的空数据库 [root@meetbill ~]# mkdir /var/lib/mysql_3307 [root@meetbill ~]# mysql_install_db --datadir=/var/lib/mysql_3307 --user=mysql
-
3、给数据文件赋予 mysql 用户与用户组
[root@meetbill ~]# chown -R mysql.mysql /var/lib/mysql_3307
-
4、创建 multi 的配置 cnf 文件,用于启动这个 mysql 实例,/etc/my_multi.cnf
[mysqld_multi] mysqld = /usr/bin/mysqld_safe mysqladmin = /usr/bin/mysqladmin # user = root #用于登陆和关闭此服务 # password = 123456 #同上 [mysqld3307] socket = /tmp/mysql_3307.sock port = 3307 pid-file = /var/lib/mysql_3307/3307.pid datadir = /var/lib/mysql_3307/ log = /var/lib/mysql_3307/3307.log character-set-server = utf8 user = mysql
-
5、启动你的多实例
[root@meetbill ~]# mysqld_multi --defaults-extra-file=/etc/my_multi.cnf start 3307
-
6、检查是否启动成功
-
7、设置新的密码
[root@meetbill ~]# mysqladmin -uroot -S /tmp/mysql_3307.sock password 123456
-
8、登陆查看存储目录是否正确
[root@meetbill ~]# mysql -uroot -S /tmp/mysql_3307.sock -p mysql> show variables like '%datadir%';
-
9、授权
[root@meetbill ~]# mysql -uroot -S /tmp/mysql_3307.sock -p mysql> GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' IDENTIFIED BY 'mypassword' WITH GRANT OPTION; mysql> GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'127.0.0.1' IDENTIFIED BY 'mypassword' WITH GRANT OPTION; mysql> flush privileges;
-
10、登陆测试
[root@meetbill ~]# mysql -umyuser -pmypassword -h127.0.0.1 -P3307
-
11、关闭 MySQL
[root@meetbill ~]# mysqld_multi --defaults-extra-file=/etc/my_multi.cnf --user=root --password=123456 stop 3307