Mysql¶
$ sudo docker pull mariadb
$ docker run --name some-mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=rootroot -d mysql:latest
$ docker run --name some-mariadb -p 8306:3306 -e MYSQL_ROOT_PASSWORD=rootroot -d mariadb:latest
# For Sysvinit Systems
$ sudo service mysql start|stop|restart|reload|status
# or
$ sudo /etc/init.d/mysql start|stop|restart|reload|status
# For Systemd Systems #
$ sudo systemctl start|stop|restart|reload|status mariadb.service
# or
$ sudo systemctl start|stop|restart|reload|status mysql.service
# or
$ sudo systemctl start|stop|restart|reload|status mariadb
# or
$ sudo systemctl start|stop|restart|reload|status mysql
select 查询,中文显示乱码
set names utf8; set names gbk;
登陆¶
$ mysql -h localhost -u root -p
$ mysql -h localhost -u root -p -P 8306 # 指定端口号
数据库操作¶
# 创建数据库
mysqladmin -u root -p create 数据库名;
Enter password:******
/* 创建数据库 */
CREATE DATABASE db_name;
SHOW DATABASES; -- 查看数据库
USE db_name; -- 选中数据库
SHOW TABLES; -- 查看数据库中的表
DROP DATABASE db_name; -- 删除数据库
[root@host]# mysqladmin -u root -p drop 数据库名;
Enter password:******
数据表操作¶
/* 创建表 */
-- CREATE TABLE 表名(字段名1 字段类型,....字段名n 字段类型n);
CREATE TABLE table_name(column_1 data_type_1,....column_n data_type_n);
CREATE TABLE emp(
ename VARCHAR(10),
hiredate DATE,
sal FLOAT(10,2),
deptno INT(2)
);
USE account;
CREATE TABLE book2(
id INT NOT NULL AUTO_INCREMENT,
uname VARCHAR(30),
email VARCHAR(100),
passwd VARCHAR(30),
PRIMARY KEY ( id )
);
$ mysql -u root -p -D account < create_table.sql ;
USE ACCOUNT;
SOURCE ./create_table.sql
-- .\ ./create_table.sql
DESC table_name; -- 查看表结构
/* 查看表的创建语句 */
-- SHOW CREATE TABLE table_name \G;
SHOW CREATE TABLE table_name;
DROP TABLE table_name; -- 删除表
指定表引擎和字符集¶
在创建表最后,我们常用MyISAM或者InnoDB引擎。在指定引擎时,我们可以使用:
ENGINE=InnoDB
指定表默认字符集:
/*指定表默认字符集*/
DEFAULT CHARSET=utf8
CREATE TABLE emp (
useraname varchar(10) DEFAULT NULL,
password date DEFAULT NULL,
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
表结构 导入/导出¶
# 导入
mysqldump -uroot -prootroot databasefoo table1 table2 > foo.sql
mysqldump -uroot -prootroot sva_rec date_drv > foo.sql
# 导出
mysql -uroot databasefoo < foo.sql
# 导出整个数据库
# mysqldump -u用户名 -p密码 数据库名 > 导出的文件名
mysqldump -uroot -prootroot db_name > ./db_name.sql
#导出一个表,包括表结构和数据
# mysqldump -u用户名 -p 密码 数据库名 表名> 导出的文件名
mysqldump -uroot -prootroot db_name db_name> ./db_name.sql
#导出一个数据库结构
mysqldump -uroot -prootroot -d db_name > ./db_name.sql
# 导出一个表,只有表结构
# mysqldump -u用户名 -p 密码 -d数据库名 表名> 导出的文件名
mysqldump -uroot -prootroot -d db_name db_name> ./db_name.sql
/*导入数据库 source*/
SOURCE ./wcnc_db.sql
/*删除一条记录*/
DELETE FROM table_name WHERE id=2;
数据库从另外一台导入¶
$ sudo systemctl stop mariadb.service
# 替换 /val/lib/mysql 目录
$ sudo cp -r /val/lib/mysql /val/lib/mysql.bak
$ sudo cp -r new_mysql /val/lib/mysql
$ sudo chown -R mysql:mysql /val/lib/mysql
服务器数据库损坏修复¶
1. 关闭使用数据库的服务¶
systemctl stop mccenter
systemctl stop zabbix-server
2.用恢复模式启动数据库¶
编辑数据库配置文件 /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Settings user and group are ignored when systemd is used.
# If you need to run mysqld under a different user or group,
# customize your systemd unit file for mariadb according to the
# instructions in http://fedoraproject.org/wiki/Systemd
# innodb_force_recovery = 2
# innodb_purge_threads = 0
max_allowed_packet = 500M
wait_timeout = 600
[mysqld_safe]
log-error=/var/log/mariadb/mariadb.log
pid-file=/var/run/mariadb/mariadb.pid
#
# include all files from the config directory
#
!includedir /etc/my.cnf.d
- 在[mysqld]下添加 innodb_force_recovery = 2 ,其中等号右侧的数值应该从1到6逐个测试。
- 在[mysqld]下添加 innodb_purge_threads = 0 。
- 在[mysqld]下添加 max_allowed_packet = 500M 。
- 在[mysqld]下添加 wait_timeout = 600 。
#重启数据库服务
systemctl restart mariadb
如果长时间没有完成,则用 ctrl + c 停止命令执行。继续修改配置文件,增大 innodb_force_recovery 的值。 然后重启数据库服务。
如果重启数据库命令执行完成,用 systemctl status mariadb ,命令查看数据库服务是否已经启动。 如果没有,继续修改配置文件,增大 innodb_force_recovery 的值。然后重启数据库服务。 重复前面的步骤,直到数据库成功启动。
3.备份数据库¶
mysqldump -uroot --all-databases > all_mysql_backup.sql
4.清空数据库¶
systemctl stop mariadb #关闭数据库服务
cp -r /var/lib/mysql/ /var/lib/mysql.bak # 备份数据库
rm -rf /var/lib/mysql/* #删除数据库
5.正常启动数据库¶
# 修改配置文件: 注释掉修改的配置项
# vi /etc/my.cnf
sed -i 's/^innodb_force_recovery =.*$/# innodb_force_recovery = 2/' /etc/my.cnf
sed -i 's/^innodb_purge_threads =.*$/# innodb_purge_threads = 0/' /etc/my.cnf
systemctl restart mariadb #重启数据库
6.恢复数据库数据¶
mysql -uroot -e "source /root/all_mysql_backup.sql"
7.修改数据库用户权限¶
mysql -uroot #登录数据库shell。
/*修改数据库用户权限*/
update user set host = '%' where user ='root';
flush privileges;
quit;
mysql -uroot #登录数据库shell。
/*创建zabbix用户*/
create user 'zabbix'@'%'identified by 'zabbix';
/*给zabbix用户数据库zabbix的操作权限:*/
grant all on zabbix.* to'zabbix'@'%';
flush privileges;
quit;
8.启动停掉的服务¶
systemctl start mccenter
systemctl start zabbix-server