从MySQL备份中恢复单个表

  1. sed -n -e '/DROP TABLE.*$Table_Name/,/UNLOCK TABLES/p' MySQL_Backup.sql >> MySQL.$Table_Name.restore
  2.  
  3. mysql:
  4. use $DB_Name
  5. source MySQL.$Table_Name.restore

MySQL不中断在线添加从库

  1. #全备份(这数据不能直接用的,或许有未提交的事务或者事务还在日志里并未写入硬盘)
  2. $Master: innobackupex --user='root' --password='$Password' --defaults-file=/etc/my.cnf /data/test/fulltest --socket=/tmp/mysql.sock 
  3.  
  4. #apply-log(apply log后的数据才可直接使用)
  5. $Master: innobackupex --apply-log /data/test/fulltest/2015-06-04_16-41-51/
  6.  
  7. #恢复
  8. $Slave:清空New_Slavedatadir
  9.  
  10. #移动ib_logfile文件到MySQL的log文件夹
  11. $Slavemv ib_logfile* /path/to/mysql/log/
  12.  
  13. #修改my.cnf
  14. 修改server-id=xx
  15.  
  16. #启动mysql服务
  17. $Slaveservice mysqld start
  18.  
  19. #查看文件xtrabackup_binlog_info查看binlog位置并change master;
  20. $SlaveCHANGE MASTER TO MASTER_HOST='$masterip', MASTER_PORT=3306,MASTER_USER='$repl_user',MASTER_PASSWORD='$slavepass',MASTER_LOG_FILE='$bin.000001',MASTER_LOG_POS=481;
  21.  
  22. #启动从库服务
  23. $Slaveslave start

参考:percona-xtrabackup-setting_up_replication

查询修改MySQL表的存储引擎

查MySQL某个表的引擎:

  1. 方法1)
  2. show table status where name='$Table_Name'
  3.  
  4. 方法2)
  5. xxd -l 4 tablename.frm
  6. 0000000: fe01 0909
  7.  
  8. xxd -l 4 tablename.frm
  9. 0000000: fe01 0a0c
  10.  
  11. 前面4位固定为fe01,紧接着4位,0CInnoDB09MyISAM

查看全局引擎支持类型

  1. show engines;

MyISAM限制:
没有外键更新删除
无法回滚
没有事务
行数最多为4284867296
每一行最大的索引为64个

InnoDB限制:
不能全文索引,最新版貌似可以英文

MyISAM使用表级别的锁,而InnoDB使用行级别的锁。
更改全局引擎:

  1. SET storage_engine=$Engine

建表指定为InnoDB,默认为MyISAM

  1. CREATE TABLE table_name (rid INT) ENGINE = INNODB;
  2. CREATE TABLE table_name (rid INT) TYPE = INNODB;

转换一个表的存储引擎为InnoDB:

  1. ALTER TABLE table_name ENGINE = INNODB;

mysql恢复root默认权限

  1. 1. 停止mysql
  2.  
  3. 2. 以安全模式启动mysql
  4. mysqld_safe  --skip-grant-tables &
  5.  
  6. 3. 进入mysql;
  7. update mysql.user set Select_priv='Y', Insert_priv='Y',Update_priv='Y',Delete_priv='Y',
  8.         Create_priv='Y',Drop_priv='Y',Reload_priv='Y',Shutdown_priv='Y',
  9.         Process_priv='Y',File_priv='Y',Grant_priv='Y',References_priv='Y',
  10.         Index_priv='Y',Alter_priv='Y',Show_db_priv='Y',Super_priv='Y',
  11.         Create_tmp_table_priv='Y',Lock_tables_priv='Y',Execute_priv='Y',
  12.         Repl_slave_priv='Y',Repl_client_priv='Y',Create_view_priv='Y',
  13.         Show_view_priv='Y',Create_routine_priv='Y',Alter_routine_priv='Y',
  14.         Create_user_priv='Y',Event_priv='Y',Trigger_priv='Y' where User='root';

ERROR 1146: Table ‘mysql.servers’ doesn’t exist

ERROR 1146 (42S02): Table ‘mysql.servers’ doesn’t exist 的解决办法

  1. mysql> flush privileges;
  2. ERROR 1146 (42S02): Table 'mysql.servers' doesn't exist
  3.  
  4.  
  5.  
  6. mysql> USE mysql;
  7.  
  8.  
  9.  
  10. mysql> CREATE TABLE `servers` (
  11.     -> `Server_name` CHAR(64) NOT NULL,
  12.     -> `Host` CHAR(64) NOT NULL,
  13.     -> `Db` CHAR(64) NOT NULL,
  14.     -> `Username` CHAR(64) NOT NULL,
  15.     -> `Password` CHAR(64) NOT NULL,
  16.     -> `Port` INT(4) DEFAULT NULL,
  17.     -> `Socket` CHAR(64) DEFAULT NULL,
  18.     -> `Wrapper` CHAR(64) NOT NULL,
  19.     -> `Owner` CHAR(64) NOT NULL,
  20.     -> PRIMARY KEY (`Server_name`)
  21.     -> ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COMMENT='MySQL Foreign Servers table';
  22. Query OK, 0 rows affected (0.01 sec)
  23.  
  24. mysql> flush privileges;
  25. Query OK, 0 rows affected (0.00 sec)
3 123»