CentOS7yum安装MySQL5.7
centos7 yum安装mysql 5.7
wget https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm
rpm -ivh mysql80-community-release-el7-1.noarch.rpm
yum repolist all | grep mysql
yum-config-manager --disable mysql80-community
yum-config-manager --enable mysql57-community
yum repolist all | grep mysql
yum install -y mysql-community-server配置示例
[client]
port = 3306
socket = /data/mysql/logs/mysqld.sock
[mysqld]
socket = /data/mysql/logs/mysqld.sock
port = 3306
skip-external-locking
character-set-server=utf8
skip-name-resolve
default-storage-engine=Innodb
back_log = 500
key_buffer_size = 256M
max_allowed_packet = 256M
table_open_cache = 512
sort_buffer_size = 256M
net_buffer_length = 1048576
read_buffer_size = 32M
join_buffer_size = 64M
read_rnd_buffer_size = 64M
myisam_sort_buffer_size = 128M
query_cache_size = 2048M
thread_cache_size = 64
tmp_table_size = 256M
log-error = /data/mysql/logs/error.log
log-bin-trust-function-creators= 1
datadir=/data/mysql/data/
innodb_lock_wait_timeout=500
innodb_flush_log_at_trx_commit = 0
innodb_buffer_pool_size=2G
transaction_isolation = READ-COMMITTED
innodb_data_file_path = ibdata1:1G:autoextend
innodb_thread_concurrency = 56
innodb_read_io_threads = 56
innodb_write_io_threads = 56
innodb_file_per_table = 1
innodb_open_files = 10240
innodb_data_home_dir = /data/mysql/ibdata/
innodb_log_group_home_dir = /data/mysql/ibdata/
innodb_log_files_in_group = 2
innodb_log_file_size = 512M
innodb_log_buffer_size = 8M
lower_case_table_names = 0
expire_logs_days=10
character-set-server = utf8
event_scheduler = off
max_connections = 1000
wait_timeout = 864000
group_concat_max_len = 99999
server-id=01
auto-increment-increment = 2 #字段变化增量值,该值必须等于或大于主服务器数量,
auto-increment-offset = 1 #服务器1值为1,则服务器2值为2(不能相同)
skip-name-resolve #解决 Name or service not known 错误
log_slave_updates=1 #多主多从,用于将其它主数据库的操作写入binary log
log-bin = /data/mysql/binlog/mysql-bin
binlog-ignore-db = zabbix
binlog_format = row
binlog_cache_size = 64M
slow_query_log = 1
slow_query_log_file=/data/mysql/logs/mysqld-slow.log
long_query_time = 5
explicit_defaults_for_timestamp = true
sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
log_timestamps=SYSTEM
[mysqldump]
quick
max_allowed_packet = 256Mmy.cnf 配置文件
[client]
port = 3306
socket = /data/mysql/logs/mysqld.sock
[mysqld]
socket = /data/mysql/logs/mysqld.sock
port = 3306
skip-external-locking # 忽略外部锁,当外部锁定(external-locking)起作用时,每个进程若要访问数据表,则必须等待之前的进程完成操作并解除锁定。由于服务器访问数据表时经常需要等待解锁,因此在单服务器环境下external locking会让MySQL性能下降。所以在很多Linux发行版的源中,MySQL配置文件中默认使用了skip-external-locking来避免external locking。
character-set-server=utf8 # 服务器字符集
skip-name-resolve # 禁用dns解析,不能在MySQL的授权表中使用域名只能用ip格式
default-storage-engine=Innodb # 默认存储引擎
back_log = 500 # 在MySQL暂时停止回答新请求之前的短时间内多少个请求可以被存在堆栈中。也就是说,如果MySql的连接数达到max_connections时,新来的请求将会被存在堆栈中,以等待某一连接释放资源,该堆栈的数量即back_log,如果等待连接的数量超过back_log,将不被授予连接资源。
key_buffer_size = 256M #指定用于索引的缓冲区大小,增加它可得到更好处理的索引(对所有读和多重写),到你能负担得起那样多。如果你使它太大,系统将开始换页并且真的变慢了。对于内存在4GB左右的服务器该参数可设置为384M或512M。通过检查状态值Key_read_requests和Key_reads,可以知道 key_buffer_size 设置是否合理。比例key_reads / key_read_requests应该尽可能的低,至少是1:100,1:1000更好(上述状态值可以使用SHOW STATUS LIKE ‘key_read%’获得)。
max_allowed_packet = 256M # 限制Server接受的数据包大小
table_open_cache = 512 # 指定表高速缓存的大小。每当MySQL访问一个表时,如果在表缓冲区中还有空间,该表就被打开并放入其中,这样可以更快地访问表内容。通过检查峰值时间的状态值Open_tables和Opened_tables,可以决定是否需要增加table_open_cache的值。如果你发现open_tables等于table_open_cache,并且opened_tables在不断增长,那么你就需要增加table_open_cache的值了(上述状态值可通过SHOW GLOBAL STATUS LIKE ‘Open%tables’获得)。注意,不能盲目地把table_open_cache设置成很大的值,设置太大超过了shell的文件描述符(通过ulimit -n查看),造成文件描述符不足,从而造成性能不稳定或者连接失败。
sort_buffer_size = 256M # Sort_Buffer_Size 是一个connection级参数,在每个connection第一次需要使用这个buffer的时候,一次性分配设置的内存。Sort_Buffer_Size 并不是越大越好,由于是connection级的参数,过大的设置+高并发可能会耗尽系统内存资源。
net_buffer_length = 1048576 # 这个参数的最大作用就是对导入导出数据进行分段,在大数据导入导出的时候可以很大的提升导入导出性能。
read_buffer_size = 32M # 是MySQL读入缓冲区的大小,将对表进行顺序扫描的请求将分配一个读入缓冲区,MySQL会为它分配一段内存缓冲区,read_buffer_size变量控制这一缓冲区的大小,如果对表的顺序扫描非常频繁,并你认为频繁扫描进行的太慢,可以通过增加该变量值以及内存缓冲区大小提高其性能,read_buffer_size变量控制这一提高表的顺序扫描的效率 数据文件顺序。
join_buffer_size = 64M
read_rnd_buffer_size = 64M
myisam_sort_buffer_size = 128M
query_cache_size = 2048M
thread_cache_size = 64
tmp_table_size = 256M
log-error = /data/mysql/logs/error.log
log-bin-trust-function-creators= 1
datadir=/data/mysql/data/
innodb_lock_wait_timeout=500
innodb_flush_log_at_trx_commit = 0
innodb_buffer_pool_size=2G
transaction_isolation = READ-COMMITTED
innodb_data_file_path = ibdata1:1G:autoextend # iddata1文件大小配置,ibdata1是一个用来构建innodb系统表空间的文件,这个文件包含了innodb表的元数据、撤销记录、修改buffer和双写buffer
innodb_thread_concurrency = 56
innodb_read_io_threads = 56
innodb_write_io_threads = 56
innodb_file_per_table = 1
innodb_open_files = 10240
innodb_data_home_dir = /data/mysql/ibdata/
innodb_log_group_home_dir = /data/mysql/ibdata/
innodb_log_files_in_group = 2
innodb_log_file_size = 512M
innodb_log_buffer_size = 8M
lower_case_table_names = 0
expire_logs_days=10
character-set-server = utf8
event_scheduler = off
max_connections = 1000 # 最大连接数
wait_timeout = 864000
group_concat_max_len = 99999
server-id=01 # 服务器ID,如果做主从复制或多主复制,该ID必须唯一
auto-increment-increment = 2 #字段变化增量值,该值必须等于或大于主服务器数量,
auto-increment-offset = 1 #服务器1值为1,则服务器2值为2(不能相同)
skip-name-resolve #解决 Name or service not known 错误
log_slave_updates=1 #多主多从,用于将其它主数据库的操作写入binary log
log-bin = /data/mysql/binlog/mysql-bin
binlog-ignore-db = zabbix
binlog_format = row
binlog_cache_size = 64M
slow_query_log = 1
slow_query_log_file=/data/mysql/logs/mysqld-slow.log
long_query_time = 5
explicit_defaults_for_timestamp = true
sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
log_timestamps=SYSTEM
[mysqldump]
quick
max_allowed_packet = 256M创建相关目录,修改目录权限
mkdir -p /data/mysql/logs
mkdir -p /data/mysql/data
mkdir -p /data/mysql/ibdata
mkdir -p /data/mysql/binlog
cd /data
chown -R mysql. mysql首次启动
mysqld --initialize-insecure --user=mysql
systemctl start mysqld
systemctl enable mysqld
mysql -u root
grant all privileges on *.* to ‘root’@’localhost’ identified by ‘123456’ with grant option;
grant all privileges on *.* to ‘root’@’%’ identified by ‘654321’ with grant option;[[MySQL配置查询日志]]
MySQL不带where条件的UPDATE和DELETE 限制操作
sql_safe_updates参数可以限制不带where条件的update/delete语句执行失败,这个参数设置后,可以防止业务bug/漏洞导致把整个表都更新或者删除,也可以防止DBA在线误操作更新/删除整张表。
当sql_safe_updates设置为1时,UPDATE :要有where,并查询条件必须使用为索引字段,或者使用limit,或者两个条件同时存在,才能正常执行。DELETE:where条件中带有索引字段可删除,where中查询条件不是索引,得必须有limit。主要是防止UPDATE和DELETE 没有使用索引导致变更及删除大量数据。系统参数默认值为0
为了防止线上业务出现以下3种情况影响线上服务的正常使用和不小心全表数据删除:
1:没有加where条件的全表更新操作
2:加了where 条件字段,但是where 字段 没有走索引的表更新
3:全表delete 没有加where 条件 或者where 条件没有 走索引
查看sql_safe_updates是否开启
show VARIABLES like 'sql_safe_updates'MySQL autocommit 的使用
autocommit 的使用MySQL默认开启事务自动提交模式,即除非显示的开启事务(BEGIN或START TRANSACTION),否则每条SQL语句都 会被当做一个单独的事务自动执行。但有些情况下,我们需要关闭事务自动提交来保证数据的一致性。
# 查看事务自动提交模式的状态,默认是'ON'
SHOW VARIABLES LIKE 'autocommit';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| autocommit | ON |
+---------------+-------+
1 row in set (0.01 sec)
# 使用set来修改事务的自动提交模式,0或OFF为关,1或ON为开
SET autocommit = 0|ON|OFF;
例如,张三给李四转500块钱,语句由更新张三和李四的账户余额两条sql构成,
UPDATE db.bank SET currentMoney = currentMoney-500 WHERE customerName='张三' ;
UPDATE db.bank SET currentMoney = currentMoney+500 WHERE customerName='李四';如果开启了事务自动提交,那么一旦张三的余额不够500,那第一条则会执行失败,但第二条却会执行成功。结果就是张三的钱一分没少,李四的账上多了500. 想要避免这个问题,就是关闭自动事务,将两条语句当成一个事务,一旦两条语句中有一条执行失败,只要执行ROLLBACK;,就会将表中数据还原成执行前的状态;如果语句执行成功,可以使用COMMIT来提交事务,将最终更新的结果保存下来。
如果临时想要实现实这个功能可以在所有SQL的前面加上BEGIN或START TRANSACTION表示开启事务,在语句最后使用COMMIT来提交或使用ROLLBACK来回滚所有操作。如果语句执行后并没有使用COMMIT来提交事务而直接关闭sql会话,则会自动回滚
使用 BEGIN 或 START TRANSACTION 开启一个事务之后,自动提交将保持禁用状态,直到使用 COMMIT 或 ROLLBACK 结束事务。之后,自动提交模式会恢复到之前的状态,即如果 BEGIN 前 autocommit = 1,则完成本次事务后 autocommit 还是 1。如果 BEGIN 前 autocommit = 0,则完成本次事务后 autocommit 还是 0。
MySQL加减乘除
+
对字段值加上一个指定的数值
-
对字段值减去一个指定的数值
*
对字段值乘以一个指定的数值
/
对字段值除以一个指定的数值
% or mod
取余,例如10 % 3=1; 10 mod 3 =1
div
取商(整除) 例如 5 div 2 = 2
power
幂运算
# 查询时运算
SELECT number+50 from DB.TABLE WHERE name=zhangsan;
# 更新时运算
UPDATE DB.TABLE set name=name+50 WHERE name=zhangsan;最后更新于