MySQL安装

MySQL安装

一、环境准备

SELinux和系统防火墙iptables需要关闭

# 要把SELINUX设置disable,重启系统
vim /etc/sysconfig/selinux
SELINUX=disabled
# 查看iptables当前状态以及关闭
chkconfig --list|grep iptables
# 关闭
chkconfig iptables off

I/O调度系统默认是cfq模式, 强烈建议使用deadline模式

# 查看I/O调度文件
cat /sys/block/sda/queue/scheduler
noop anicipatory deadline[cfq]
# 修改I/O调度 在/etc/grub.conf 中加入 elevator=deadline,保证永久生效
cat /etx/grup.conf
elevator=deadline

swap分区设置

# swappiness值大小对swap分区影响,它有0和100两个极限值
# 0 代表最大限度地使用物理内存,然后才使用swap分区,这种行为有可能导致系统内存溢出,
#   出现OOM的错误,从而导致MySQL被意外kill掉,所以需要谨慎设置
# 100 则是积极地使用swap分区,并且把内存上面的数据及时搬到swap分区里(不建议)
#      建议大家不分配swap,或者分配4GB的空间就足够了
# 查看swappiness文件
cat /proc/sys/vm/swappiness
sysctl -a|grep swap
# 修改swappiness 
# 编辑 /etc/sysctl.conf 加上vm.swappiness的值
vim /etc/sysctl.conf 
vm.swappiness=60

文件系统

# 建议大家使用xfs文件系统,相比ext4,它更方便管理,支持动态扩容,删除文件也很方便

操作系统的限制

# 使用ulimit查看
ulimit -a
# 两个重要参数
# open files 默认情况下,linux最大句柄数为1024,表示单进程最多可以访问1024个文件句柄
# 超过默认值,会出现文件句柄超时错误"too many open files"
open files   (-n) 1024
# max user proccess: 有时我们可能会跑更多实例,但发现创建不了新的连接,
#  报出"resource temporarily unavailable"错误,表示没有足够的资源
max user proccess    (-u)14865

# 通过 编辑/etc/security/limit.conf,修改软硬限制,重启操作系统

numa 需要关闭

#  关闭numa功能,可以更好分配内存,不需要采用swap方式获取内存
#  使用swap导致数据库性能下降会特别恶心
# 关闭numa方式分在BIOS、操作系统中关闭,或者在数据库启动过程中关闭
numa --interleave=all /usr/local/mysql/bin/mysqld_safe --defaults-file=/etc/my.cnf & 

二、bin安装

2.1 准备软件包

# 创建用户,指定用户组
groupadd mysql
useradd -g mysql mysql -s /sbin/nologin
# 软件包统一规范放在/usr/local下面
cd /user/local/
# 解压
tar -zvxf mysql-5.7.29-linux-glibc2.12-x86_64.tar.gz
# 软连接
ln -s mysql-5.7.29-linux-glibc2.12-x86_64 mysql
# 给mysql目录授权
chown mysql:mysql -R mysql

2.2 数据目录

# 创建数据库的数据目录 /data/mysql
mkdir -p /data/mysql
# 目录授权
chown mysql:mysql -R /data/mysql

2.3 配置文件

# vim /etc/my.cnf
[client]
port = 3306
socket = /tmp/mysql.sock
[mysql]
prompt="\u@db \R:\m\s [\d]>"
no-auto-rehash
[mysqld]
user = mysql
port = 3306
basedir = /usr/local/mysql
datadir = /data/mysql/
socket = /tmp/mysql.sock
character-set-server = utf8mb4
skip_name_resolve = 1
open_files_limit = 65535
back_log = 1024
max_connections = 1024
max_connect_errors = 1000000
table_open_cache = 1024
table_definition_cache = 1024
table_open_cache_instance = 64
thread_stack = 512K
external-locking = FALSE
max_allowed_packet = 32M
sort_buffer_size = 4M
join_buffer_size = 4M
thread_cache_size = 768
query_cache_size = 0
query_cache_type = 0
interactive_timeout = 600
wait_timeout = 600
tmp_table_size = 32M
max_heap_table_size = 32M
slow_query_log = 1
slow_query_log_file = /data/mysql/mysql.log
log-error = /data/mysql/error.log
long_query_time = 0.5
server-id = 3306100
log-bin = /data/mysql/mysql-binlog
sync_binlog = 1
binlog_cache_size = 4M
max_binlog_cache_size = 1G
max_binlog_size = 1G
expire_logs_days = 7
master_info_repository = TABLE
relay_log_info_repository = TABLE
gtid_mode = on
enforce_gtid_consistency = 1
log_slave_updates
binlog_format = row
relay_log_recovery = 1
relay-log-purge = 1
key_buffer_size = 32M
read_buffer_szie = 8M
read_rnd_buffer_size = 4M
bulk_insert_buffer_size = 64M

lock_wait_timeout = 3600
explicit_defaults_for_timestamp = 1
innodb_tread_concurrency = 0 
innodb_sync_spin_loops = 100
innodb_sync_wait_delay = 30
transaction_isolation = REPEATABLE-READ
innodb_buffer_pool_size = 1024M
innodb_buffer_pool_instances = 8
innodb_buffer_pool_load_at_startup = 1
innodb_buffer_pool_dump_at_shutdown = 1
innodb_data_file_path = ibdata1:1G:autoextend
innodb_flush_log_at_try_commit = 1
innodb_log_buffer_size = 32M
innodb_log_file_size = 32M
lnnodb_log_files_in_group = 2
innodb_io_capacity = 2000
innodb_io_capacity_max = 4000
innodb_flush_neighbors = 0
innodb_write_io_threads = 8
innodb_purge_threads = 4
innodb_page_cleaners = 4
innodb_open_files = 65535
innodb_max_dirty_pages_pct = 50
innodb_flush_method = O_DIRECT
innodb_lru_scan_depth = 4000
innodb_checksum_algorithm = crc32
innodb_lock_wait_timeout = 10
innodb_rollback_on_timeout = 1
innodb_print_all_deadlocks = 1
innodb_file_per_table = 1
innodb_online_alter_log_max_size = 4G
internal_tmp_disk_storage_engine = InnoDB
innodb_status_on_metadata = 0
innodb_status_file = 1
innodb_status_output = 0
innodb_status_output_locks = 0
#performance_schema
performance_schema = 1
performance_schema_instrument = '%=on'
#innodb monitor
innodb_monitor_enable="module_innodb"
innodb_monitor_enable="module_server"
innodb_monitor_enable="module_dml"
innodb_monitor_enable="module_ddl"
innodb_monitor_enable="module_trx"
innodb_monitor_enable="module_os"
innodb_monitor_enable="module_purge"
innodb_monitor_enable="module_log"
innodb_monitor_enable="module_lock"
innodb_monitor_enable="module_buffer"
innodb_monitor_enable="module_index"
innodb_monitor_enable="module_ibuf_system"
innodb_monitor_enable="module_buffer_page"
innodb_monitor_enable="module_adaptive_hash"
[mysqldump]
max_allowed_packet = 32M
quick

MySQL 读取配置文件的顺序 /etc/my.cnf->/etc/mysql/my.cnf->/usr/local/mysql/etc/mysql.cnf->~/.my.cnf

2.4 初始化数据库

  • 5.6版本
# 使用mysql_intall_db脚本
cd /usr/local/mysql/scripts
./mysql_install_db --basedir=/usr/local/mysql \
--datadir=/data/mysql \
--default-file=/etc/my.cnf \
--user=mysql
  • 5.7版本
# 使用mysqld命令初始化数据库
cd /usr/local/mysql/bin
./mysqld --defaults-file=/etc/my.cnf \
--basedir=/usr/local/mysql \
--datadir=/data/mysql   \
--user=mysql  \
-initialize 
# 如果在初始化过程中添加--initialize参数,表示会生成一个临时数据库初始密码,记录在log-error里面
# 如果加上--initialize-insecure参数,代表无密码进入

2.5 启动数据库

cd /usr/local/mysql/bin/
./mysqld_safe --defaults-file=/etc/my.cnf &

MySQL数据库的连接方式

# TCP/IP 网络连接
mysql -u username -p password -P port -h IP
# UNIX Socket 连接 ,客户端和数据库实例在同一台服务器上的情况下使用
mysql -u username -p password -S /tmp/mysql.sock

2.6 密码

# 5.6 初始进入无密码,设置初始密码
use mysql;
update user set password=password("root123") where user='root';
flush privileges;
# 5.7 初始化密码在/data/mysql/error.log
cat /data/mysql/error.log |grep password
# 初始化密码进入数据库,修改数据库root密码,设置为永不过期
SET PASSWORD = 'root123';
ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
flush privileges;

忘记密码处理

# 强制停机,先查看MySQL进程号
ps -ef|grep mysql
# kill mysql
kill -9 xxx xxx
# 添加跳过权限表参数(--skip-grant-tables),重新进入数据库
./mysqld_safe --defaults-file=/etc/my.cnf --skip-grant-tables &
# 重置root用户新密码,5.7之后,MySQL库下的password字段用authentication_string字段替换
use mysql;
update user set authentication_string=password('root123') where user='root';
flush privileges

2.7 关闭数据库

# 正常关闭
cd /usr/local/mysql/bin
./mysqladmin -uroot -proot123 shutdown
# 非正常关闭
kill -9 xxx

2.8 用户权限管理

查看数据库用户

# 5.6 版本
select user,host,password from user;
# 5.7 版本
use mysql;
select user,host,authentication_string from user;

创建用户

# 创建用户时,最好保证专库专账户,不要一个账户管理多个库
# 主机IP避免使用%,可以分配一个IP地址网段
create user 用户名@主机ip identified by '密码'
# 只读用户
create user 'erp_read'@'192.168.56.%' identified by 'erp123';
grant select on erp.* to 'erp_read'@'192.168.56.%' identified by 'erp123';
# 读写用户
create user 'erp_user'@'192.168.56.%' identified by 'erp456';
grant select,insert,update,delete on erp.* to 'erp_user'@'192.168.56.%' identified by 'erp456';
# 别忘了刷新权限
flush privileges;

你可能感兴趣的:(mysql)