2019-09-02 Some Tips for Mysql

错误提示:ERROR 1045 (28000): Unknown error 1045
用户密码错误, so,如何恢复密码?
1、修改/etc/my.cfg文件,在mysqld之下添加下面的代码

skip-grant-tables
#意思是:跳过授权表,即无密码直接登陆

2、重启服务MySQL

sudo systemctl restart mariadb
#或者是mysqld

3、进入数据库,这时候mysql -uroot -p 无需密码进入。
正常更改密码使用命令:

set password for 用户名@localhost = password('新密码'); 

但由于我们跳过了授权表,则需要直接更改数据库:

use mysql; 
update user set password=password("新密码") where user="root";
flush privileges;

重启服务MySQL,以新密码可以登入

允许远程连接数据库
进入mysql后

grant all privileges on *.* to 'root'@'%' identified by '密码' with grant option;

备份远程mysql服务器到本地

mysqldump -h XX.XXX.XXX.XXX -uroot -p --all-databases --add-drop-table > /home/all_database.sql

当然,本地服务器要安装了mysql
服务器本地备份去掉-h xx.xxx.xxx.xxx 这个选项就行了。这里xx.xxx.xxx.xxx是远程mysql服务器地址

从本地备份恢复到远程mysql服务器

mysql -h xx.xxx.xxx.xxx -u root -p < all_database.sql

mysql ibdata1文件太大
ibdata1文件一般在/var/lib/mysql/下,这个文件包含了innodb表的元数据,修改撤销记录,buffer等,时间长了这个文件就变得很大。
可以用sudo du -lh --max-depth=1 查看文件夹大小。
解决办法是打开 innodb_file_per_table 这个选项,即,在/etc/my.cnf 里,在[mysqld]里修改/增加:

innodb_file_per_table = 1
innodb_flush_method = 0_DIRECT
innodb_log_file_size = 1G
innodb_buffer_pool_size = 4G (通常建议设置为物理内存的70%)

新装的mysql直接改,而已有数据的就比较麻烦一点:
1、当然是备份数据库

#备份所有数据库
mysqldump -uroot -p --all-databases --add-drop-table > /home/all_database.sql

2、删除用户数据库,系统数据库(mysql, performance_schema, INFORMATION_SCHEMA)除外
3、停止mysql服务,更改/etc/my.cnf配置文件。

systemctl stop mariadb

4、备份/var/lib/mysql/目录下的ibdata1, ib_logfile文件。备份完成后删除ibdata1, ib_logfile
重启mysql

5、把刚才备份的用户数据恢复回来

mysql -uroot -p < /home/all_database.sql
#或者进入数据库后
source /home/all_database.sql

6、现在去看/var/lib/mysql文件,ibd文件,数据和索引就编程几个对应数据表的ibd文件了。

你可能感兴趣的:(2019-09-02 Some Tips for Mysql)