[toc] 从今天开始MySQL相关方面的东西 今天是关于MySQL的安装 系统为 redhat 7.4 数据库为MySQL 8.0.19 ## 1. 目录规划 | 目录名称 | 参数名称 | 路径地址| | --------- | --------- | ---------| | 安装目录 | basedir|/usr/local/mysql| | 数据文件目录 | datadir |/data/mysql/data| | 临时文件目录 | tmpdir |/data/mysql/tmp| | socket文件目录 |socket|/data/mysql/data/mysql.sock| | bin日志文件目录| log_bin|/datalog/mysql/binlog| | relay日志文件目录| relay_log |/datalog/mysql/relaylog| ## 2. MySQL 8.0 下载 [https://dev.mysql.com/downloads/mysql/](https://dev.mysql.com/downloads/mysql/) [image:884 size:orig] [image:885 size:orig] ## 3. 新建用户及目录 `/usr/sbin/groupadd -g 105 mysql` `/usr/sbin/useradd -u 105 -g mysql mysql` `echo "mysql123" |passwd mysql --stdin` ## 4. 新建目录 ``` mkdir -p /data/mysql/software mkdir -p /usr/local/mysql mkdir -p /data/mysql/data mkdir -p /datalog/mysql/binlog mkdir -p /datalog/mysql/relaylog chown -R mysql:mysql /usr/local/mysql mkdir -p /data/mysql/tmp chown -R mysql:mysql /data/mysql chown -R mysql:mysql /datalog/mysql/ ``` ## 5. 配置环境变量 ``` su - mysql vim ~/.bash_profile export MYSQL_HOME=/usr/local/mysql export PATH=$HOME/bin:$MYSQL_HOME/bin:$PATH export LD_LIBRARY_PATH=$MYSQL_HOME/lib:$LD_LIBRARY_PATH source ~/.bash_profile ``` ## 6. 建立配置文件 8.0的参数和5.7的参数有些不一样 - expire_logs_days参数被废弃,使用binlog_expire_logs_seconds参数代替 - innodb_undo_tablespaces参数被废弃,8.0会根据innodb_page_size自动建立 - innodb_file_format,innodb_file_format_check,innodb_file_format_max,innodb_large_prefix参数被废弃并移除了 - query_cache_type和query_cache_size参数被废弃 我们这里建立 /etc/my.cnf ``` [mysql] socket = /data/mysql/data/mysql.sock [mysqld] #-----------------MySQL Basic Setting-----------------# server-id = 1921680101 port = 3306 user = mysql pid-file = mysql.pid character_set_server = utf8mb4 default_storage_engine = InnoDB skip_name_resolve = 1 lower_case_table_names = 1 explicit_defaults_for_timestamp = 1 open_files_limit = 65535 max_connections = 1000 max_connect_errors = 100000 basedir = /usr/local/mysql datadir = /data/mysql/data tmpdir = /data/mysql/tmp socket = /data/mysql/data/mysql.sock join_buffer_size = 64M tmp_table_size = 64M max_allowed_packet = 32M read_buffer_size = 16M read_rnd_buffer_size = 32M sort_buffer_size = 32M log_error_verbosity=2 log_timestamps=SYSTEM #-----------------MySQL Log Setting-----------------# log_error = mysql-error.log log_bin = /datalog/mysql/binlog/mysql-bin.log slow_query_log_file = mysql-slow.log relay_log = /datalog/mysql/relaylog/mysql-relay.log log_slave_updates = 1 sync_binlog = 1 relay_log_recovery = 1 binlog_format = row binlog_expire_logs_seconds = 604800 slow_query_log = 1 long_query_time = 2 log_queries_not_using_indexes = 1 log_throttle_queries_not_using_indexes = 10 log_slow_admin_statements = 1 log_slow_slave_statements = 1 min_examined_row_limit = 1000 #-----------------MySQL Replication Setting-----------------# master_info_repository = TABLE relay_log_info_repository = TABLE gtid_mode = on enforce_gtid_consistency = 1 binlog_rows_query_log_events = 1 #-----------------MySQL InnoDB Setting-----------------# innodb_page_size = 16384 innodb_buffer_pool_size = 400M innodb_data_file_path = ibdata1:1G:autoextend innodb_buffer_pool_instances = 8 innodb_file_per_table = 1 innodb_buffer_pool_load_at_startup = 1 innodb_buffer_pool_dump_at_shutdown = 1 innodb_flush_log_at_trx_commit = 1 innodb_lock_wait_timeout = 5 innodb_io_capacity = 800 innodb_io_capacity_max = 2000 innodb_flush_method = O_DIRECT #innodb_file_format = Barracuda #innodb_file_format_max = Barracuda innodb_flush_neighbors = 1 innodb_log_file_size = 2G innodb_log_buffer_size = 16777216 innodb_print_all_deadlocks = 1 innodb_strict_mode = 1 innodb_sort_buffer_size = 67108864 #-----------------MySQL semi Replication Setting-----------------# #plugin_dir = /usr/local/mysql/lib/plugin #plugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so" #loose_rpl_semi_sync_master_enabled = 1 #loose_rpl_semi_sync_slave_enabled = 1 #loose_rpl_semi_sync_master_timeout = 5000 ``` **修改my.cnf权限** `chown mysql:mysql /etc/my.cnf` ## 7. 依赖包检查 ``` libaio-0.3.107-10.el6.x86_64 libaio-devel-0.3.107-10.el6.x86_64 lvm2-2.02.143-7.el6_8.1.x86_64 ``` ## 8. 卸载以前版本 如果有以前版本的MySQL ,则需要先下载 如只有lib库则可以不用动 RedHat Enterprise Linux 6适用】 ``` # rpm -qa|grep -i mysql mysql-libs-5.1.71-1.el6.x86_64 qt-mysql-4.6.2-26.el6_4.x86_64 mysql-5.1.71-1.el6.x86_64 mysql-server-5.1.71-1.el6.x86_64 #yum remove mysql-5.1.71-1.el6.x86_64 qt-mysql-4.6.2-26.el6_4.x86_64 mysql-libs-5.1.71-1.el6.x86_64 mysql-server-5.1.71-1.el6.x86_64 ``` 【RedHat Enterprise Linux 7适用】 ``` # rpm -qa|grep -i mariadb* mariadb-server-5.5.52-1.el7.x86_64 mariadb-libs-5.5.52-1.el7.x86_64 mariadb-embedded-5.5.52-1.el7.x86_64 mariadb-test-5.5.52-1.el7.x86_64 mariadb-bench-5.5.52-1.el7.x86_64 mariadb-5.5.52-1.el7.x86_64 mariadb-devel-5.5.52-1.el7.x86_64 mariadb-embedded-devel-5.5.52-1.el7.x86_64 # yum remove -y mariadb* ``` ## 9. 解压文件 ### 9.1 解压安装文件 ``` su - mysql tar xzvf mysql-8.0.19-el7-x86_64.tar.gz -C /usr/local/mysql/ --strip-components=1 ``` ### 9.2 配置服务文件 这里我们使用systectl来管理数据库的启停 root用户 ``` vi /usr/lib/systemd/system/mysqld.service [Unit] Description=MySQL Server Documentation=man:mysqld(8) Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html After=network.target After=syslog.target [Install] WantedBy=multi-user.target [Service] User=mysql Group=mysql PIDFile=/data/mysql/data/mysqld.pid # Disable service start and stop timeout logic of systemd for mysqld service. TimeoutSec=0 # Execute pre and post scripts as root PermissionsStartOnly=true # Needed to create system tables #ExecStartPre=/usr/bin/mysqld_pre_systemd # Start main service ExecStart=/usr/local/mysql/bin/mysqld --daemonize --pid-file=/data/mysql/data/mysqld.pid $MYSQLD_OPTS #注意这里要加上 --daemonize # Use this to switch malloc implementation #EnvironmentFile=-/etc/sysconfig/mysql # Sets open_files_limit LimitNOFILE = 65536 Restart=on-failure RestartPreventExitStatus=1 PrivateTmp=false ``` ## 10. 初始化数据库 接下来我们初始化MySQL ``` # su - mysql $cd /usr/local/mysql $/usr/local/mysql/bin/mysqld --defaults-file=/etc/my.cnf --initialize --user=mysql ``` 初始化过程中可以通过error文件查看进度 `tail -f /data/mysql/data/mysql-error.log` ## 11. 启动数据库 ``` root用户 systemctl start mysqld ``` 后续可以使用如下命令启停数据库 `systemctl stop mysqld` `systemctl start mysqld` `systemctl restart mysqld` 设置MySQL自启动 `systemctl enable mysqld` ## 12. 连接数据库 默认密码在error文件中有 `cat /data/mysql/data/mysql-error.log |grep password` 使用如下命令连接 `mysql -S /data/mysql/data/mysql.sock -uroot -ppassword ` 第一次登陆需要修改密码 ``` alter user 'root'@'localhost' identified with mysql_native_password by 'password'; flush privileges; ``` 连接后的安全性设置参见MySQL常见命令 好了 MySQL的 Linux 安装就先讲到这里 后续内容尽情期待