Open LingYanSi opened 8 years ago
设置Path
配置my.ini
#新版不支持在my.ini中直接设置字符集为utf8。解决方法是在default-character-set前面加上loose-。
loose-default-character-set = utf8
#加loose-后MySQL启动是不再报错了,但是在插入数据时依然出现了乱码问题。解决方法是加入character-set-server。
character-set-server = utf8
#如果是服务器用的话,建议设大点。
innodb_buffer_pool_size = 128M
#基路径
basedir = E:\mysql\
#数据路径
datadir = E:\mysql\data
#日志路径
log_bin = E:\mysql\log
#如果不加这行,默认是监听127.0.0.0,加了后是监听局域网端口和外网端口。
bind-address = 0.0.0.0
#监听端口一定要是3306
port = 3306
server_id = 1
E:\mysql\data 下有一个[用户名].err的错误日志文件,如果遇到什么错误,可以看下这个文件
create table article(
author char(30) NOT NULL,
content text NOT NULL,
tags text NOT NULL,
create_time bigint NOT NULL,
update_time bigint NOT NULL,
scan_num int(11),
summary text,
title char(255) NOT NULL,
comments_num int(11),
id int(11) AUTO_INCREMENT,
PRIMARY KEY ( id )
);
insert into article values("王刚", "我是内容", "我是标签", 12345679, 2222222);
如何设置一个自增id
id int(11) AUTO_INCREMENT,
PRIMARY KEY ( id )
采用yum源安装,yum install mysql mysql-sever mysql-client很多教程上都这么写,实际上也是对的,对于大多数centos系统默认源来讲,确实如此。 但是在阿里云服务器上,默认是阿里云自己配置的yum源 ,所以上述方法就会出问题,因为人家的yum源里面根本就没有这些东西。可能是包名改了吧,反正不是我们熟悉的那些。 所以可以使用wget命令从官网上直接下载,就有了这么一种方法。 wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm 从官网上下载后会发现本地路径已经有了rpm包。这时候利用rpm命令将rpm包导入到yum源里面去 rpm -ivh mysql-community-release-el7-5.noarch.rpm 然后利yum install mysql-community-server.x86_64命令安装 一路狂奔,安装好后使用mysql,还是不可以,因为mysqld服务没有开启。这时候使用service mysqld start然后安装结束,mysql正常开启。 使用mysql直接进入数据库里面,但是这样一来不是都可以进去了?,这时候我们要做的就是加buff保护,也就是给数据库设密码。
mysqladmin -u root password "newpass" 如果root已经设置过密码,采用如下方法 mysqladmin -u root password oldpass "newpass"
完成后,若已经设置了密码,需要输入原密码修改,若未设置密码,那么上一步完成后就修改完成 登录的时候也不能使用mysql进入了,估计也进不去,因为有暗号了,哈哈哈 这个时候使用mysql -u root/你的密码就可以进去了。到此安装就说完了。
vim /etc/my.cnf 新增参数
[client]
default-character-set=utf8
[mysqld]
character-set-server=utf8
[mysql]
default-character-set=utf8
登录MySQL查看字符集
SHOW VARIABLES LIKE "character%";
Variable_name | Value |
---|---|
character_set_client | utf8 |
character_set_connection | utf8 |
character_set_database | utf8 |
character_set_filesystem | binary |
character_set_results | utf8 |
character_set_server | utf8 |
character_set_system | utf8 |
character_sets_dir | /usr/share/mysql/charsets/ |
查看数据库编码信息 show table status; Collation = utf8_general_ci 方才正常
service mysql start/stop/restart/reload
# 使用root登录mysql
use mysql;
# 创建root用户 %表示不对ip进行限制
CREATE USER 'root'@'%' IDENTIFIED BY '你的密码';
# 给root用户所有的mysql权限
grant all privileges on *.* to 'root'@'%' with grant option;
# 刷新权限
FLUSH PRIVILEGES;
# 查看mysql用户信息
SELECT User, Host, Password FROM user;
# 远程登录
mysql -uroot -h服务器ip -p
[mysqld]
#
# \* Basic Settings
#
default-character-set=utf8
default-storage-engine=INNODBuser = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
language = /usr/share/mysql/english
skip-external-lockinggrant all on sonardb.\* to sonar@’%’ identified by ‘123456′;
grant all on sonardb.\* to sonar@localhost identified by ‘123456′;
sonardb替换为你想访问的数据库名,sonar是你的想使用的用户名,123456替换为你的密码,这样就开启了远程访问功能.
bind-address = 192.168.1.107
emoji来源于日语,表示字符的意思
utf8编码只支持1-3个字节,而一个emoji需要4个字节,因此需要对编码进行修改
service mysql stop
# utf-8
[client]
default-character-set=utf8mb4
[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove leading # to turn on a very important data integrity option: logging
# changes to the binary log between backups.
# log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
# 内存较小机器可以使用此参数
performance_schema=OFF
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
# Recommended in standard MySQL setup
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_unicode_ci
init_connect='SET NAMES utf8mb4'
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
# utf-8
[mysql]
default-character-set=utf8mb4
service mysql start
SHOW VARIABLES LIKE "character%";
查看表信息
show create table table_name;
修改数据库字符集:
ALTER DATABASE db_name DEFAULT CHARACTER SET character_name [COLLATE ...];
把表默认的字符集和所有字符列(CHAR,VARCHAR,TEXT)改为新的字符集:
ALTER TABLE tbl_name CONVERT TO CHARACTER SET character_name [COLLATE ...]
如:ALTER TABLE logtest CONVERT TO CHARACTER SET utf8 COLLATE utf8_general_ci;
只是修改表的默认字符集:change default charset uft8 -> utf8mb4
ALTER TABLE tbl_name DEFAULT CHARACTER SET character_name [COLLATE...];
如:ALTER TABLE logtest DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
修改字段的字符集:
ALTER TABLE tbl_name CHANGE c_name c_name CHARACTER SET character_name [COLLATE ...];
如:ALTER TABLE logtest CHANGE title title VARCHAR(100) CHARACTER SET utf8 COLLATE utf8_general_ci;
查看数据库编码:
SHOW CREATE DATABASE db_name;
查看表编码:
SHOW CREATE TABLE tbl_name;
查看字段编码:
SHOW FULL COLUMNS FROM tbl_name;
一开始的时候,不知道怎么给数据库设置密码,然后就被黑了一次😅 后来虽说设置了密码,但是为了数据的安全性,还是应该做好数据的备份容灾
备份命令
mysqldump -uroot -p db_name > beifen1.sql
以上,如果在命令行操作,没什么问题。不过,在shell脚本中就麻烦了,因为要手动书输入密码。
命令自动输入密码
mysql -uroot -ppassword db_name < beifen1.sql
当然还可以加上自动上传功能,把备份文件也存到其他机器上
curl
每隔30分钟备份一次数据
#! /bin/bash
while (true) {
Now=$(date +"%y-%m-%d--%H:%M:%S")
File=backup-$Now.sql
mysqldump -uroot -h127.0.0.1 -p$password db_name > $File.sql
echo "数据备份成功$(File).sql"
sleep("30m")
}
配置定时任务 http://www.cnblogs.com/mingforyou/p/3930636.html
* * * * ls 指定每小时的第5分钟执行一次ls命令
5 * * * ls 指定每天的 5:30 执行ls命令
7 8 * * ls 指定每月8号的7:30分执行ls命令
5 8 6 * ls 指定每年的6月8日5:30执行ls命令
6 * * 0 ls 指定每星期日的6:30执行ls命令[注:0表示星期天,1表示星期1, 以此类推, 也可以用英文来表示,sun表示星期天,mon表示星期一等。]
3 10,20 * * ls 每月10号及20号的3:30执行ls命令[注:“,”用来连接多个不连续的时段]
8-11 * * * ls 每天8-11点的第25分钟执行ls命令[注:“-”用来连接连续的时段]
*/15 * * * ls 每15分钟执行一次ls命令 [即每个小时的第0 15 30 45 60分钟执行ls命令 ]
6 */10 * * ls 每个月中,每隔10天6:30执行一次ls命令[即每月的1、11、21、31日是的6:30执行一次ls 命令。 ]
crontab 对应文件必须要有执行权限
chmod+x /absolute/file/path.name
添加命令
* */1 * * * /absolute/file/path.name > /log/xx.log
先新建一个数据库
create database fuck
再恢复
mysql -u root -h 127.0.0.1 -p databaseName < backup.sql
从远端cp到本地
ssh-copy root@1.24.2.1:/root/beifen1.sql ~/dir/path
use mysql;
# 设置密码
UPDATE user SET Password = PASSWORD('newpass') WHERE user = 'root';
# 更新权限
flush privileges;
# 允许远程访问
update user set host = '%' where user = 'root';
flush privileges;
这样之后,在服务器登录mysql需要
mysql -u root -h 127.0.0.1 -p
mysql默认占用的内存一般在500M甚至以上,而自己使用的腾讯云服务器内存只有1G,正常情况下的剩余内存只有
解决方案:
在my.cnf中添加performance_schema=OFF
可解决
MySQL 内存占用过高分析
可以看到每个容器的内存占用,看了真的吓一跳,MySQL 竟然占用了近500M的内存,而其他的基本就是几十兆。 奇怪的是,我服务器上也安装了 MySQL,就没有这么大的内存占用。 后来经过搜索,看到这个文章 https://mariadb.com/blog/starting-mysql-low-memory-virtual-machines,说关闭performance_schema可以减少大量内存占用,我试了一下,果然是这样。再一查,这个选项是在 MySQL5.6中开始被默认启用的,我服务器上装的是5.5,docker 容器里面的是5.7。
在 http://bugs.mysql.com/bug.php?id=69665 也有相关的讨论,使用show engine performance_schema status看了下,果然它占用了绝大部分的内存。
在 my.cnf 中设置performance_schema=OFF后重新启动 MySQL,发现问题解决,内存占用为几十兆左右。
mariadb简介MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。在存储引擎方面,使用XtraDB(英语:XtraDB)来代替MySQL的InnoDB。 MariaDB由MySQL的创始人Michael Widenius(英语:Michael Widenius)主导开发,他早前曾以10亿美元的价格,将自己创建的公司MySQL AB卖给了SUN,此后,随着SUN被甲骨文收购,MySQL的所有权也落入Oracle的手中。MariaDB名称来自Michael Widenius的女儿Maria的名字。
在centos7.0后,系统默认使用mariabd代替mysql.
yum install mariadb mariadb-server
systemctl start mariadb #启动MariaDB
systemctl stop mariadb #停止MariaDB
systemctl restart mariadb #重启MariaDB
systemctl enable mariadb #设置开机启动
# 修改root的密码
update mysql.user set password=PASSWORD('yhb123456') where user='root';
# 更新权限
flush privileges;
# create user '用户名'@'主机' identified by '密码'
# 如果只允许本机访问 @'localhost'
# 或者指定一个ip @'192.xx.xx.xx' 或者使用通配: @'%'
create user 'read_visa'@'%' identified by '123456';
# grant 操作类型 on 数据库.表 to 用户@'主机'
# 数据库,表,主机都支持通配符 grant select, insert on *.* to 'read_visa'@'%'
grant all on visa.* to 'read_visa'@'%'; # all 表示所有权限
grant select on visa.* to 'read_visa'@'%';
解决方案
新增文件 /etc/my.cnf.d/character-set.cnf
# https://scottlinux.com/2017/03/04/mysql-mariadb-set-character-set-and-collation-to-utf8/
# https://mariadb.com/kb/en/library/setting-character-sets-and-collations/
# https://medium.com/@adamhooper/in-mysql-never-use-utf8-use-utf8mb4-11761243e434
# https://stackoverflow.com/questions/47566730/force-mariadb-clients-to-use-utf8mb4
[client]
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
collation-server = utf8mb4_unicode_ci
init-connect = 'SET NAMES utf8mb4'
character-set-server = utf8mb4
MariaDB [(none)]> show variables like 'collation%'; +----------------------+--------------------+ | Variable_name | Value | +----------------------+--------------------+ | collation_connection | utf8mb4_unicode_ci | | collation_database | utf8mb4_unicode_ci | | collation_server | utf8mb4_unicode_ci | +----------------------+--------------------+ 3 rows in set (0.001 sec)
To change the root password, type the following at the MySQL/MariaDB command prompt: ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyN3wP4ssw0rd'; flush privileges; exit;
use mysql
ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyN3wP4ssw0rd'
flush privileges
1.以root身份在终端登陆(必须) 2.输入 mysqladmin -u root -p password ex 后面的 ex 是要设置的密码 3.回车后出现 Enter password 输入就密码,如果没有,直接回车
https://mariadb.com/kb/en/set-password/
# 登录mysql
sudo mysql
# 切换到mysql这个database上去
use mysql;
# 设置密码
SET PASSWORD FOR 'bob'@localhost = PASSWORD("");
mysql -h localhost -u root -p123456 < path/to/file.sql
source path/to/file.sql
mysql使用
增删改查🐶
有个教程
安装
brew install mysql mysql --version / mysql --help 校验是否安装成功
启动
mysql.server start / mysql.server stop
进入服务器
本地服务器
mysql -h127.0.0.1 -uroot -p123
mysql -h127.0.0.1 -P3306 -uusername -ppassword
quit; / ctrl+d
查询所有的库
show databases;
新建一个数据库
create database name;
删除一个数据库
drop database name;
查库中所有的表
use database; show tables;
创建一个表
删除一个表
drop table name;
插入到表中
insert into tablename("周恩来",20,0);
从表中查询
DELETE FROM sync_logs where id<1100000; DELETE FROM logs WHERE created_at<'2021-8-16 00:00:00';
重命名表
删除列
修改列
添加列
替换字符
使用node-mysql
显示表信息
倒序查找
默认是正序查找
取前几条
查看字符集,显示如下