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 5.1参考手册 MySQL 教程

登陆

$ 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