History (10k view)
$ mysql -uroot mysql Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 69 Server version: 5.1.46-log Source distribution Copyright (c) 2000, 2010, Oracle and/or its affiliates. All rights reserved. This software comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to modify and redistribute it under the GPL v2 license Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql>
A few technical details
CREATE DATABASE hack1;
USE hack1;
CREATE TABLE hack1 ( x1 INT(11) auto_increment, y2 char(60) default NULL, PRIMARY KEY (x1) ) ENGINE=kind ;
History (10k view)
A few technical details
# Uncomment the following if you are using InnoDB tables # current settings are for 10 Meg files default_storage_engine = InnoDB
MySQL-4.1.6 | http://www.decuslib.com/freeware/freewarev70/mysql/ | AXP + I64 only |
MySQL-4.1.11 | www.decuslib.com/freeware/freewarev80/mysql_jfp/ | AXP + I64 only |
Source | Product | Scope | URL | Notes | OpenSSL |
---|---|---|---|---|---|
VSI | LibMariaDB v3 | AXP/I64/X86 | https://vmssoftware.com/products/libmariadb/ | client only | link to shared image |
VSI | LibMariaDB v2 | AXP/I64/X86 | https://vmssoftware.com/products/libmariadb/ | client only | [[[ not yet tested ]]] |
VSI | MariaDB-5.5-63 | AXP/I64/X86 | https://vmssoftware.com/products/mariadb/ | client + server | SSL_, SSL$, or shared image |
Mark Berryman | MariaDB-5.5 | AXP/I64 | https://theberrymans.com/php_kits/ | client + server | SSL_ or Berryman libs |
Mark Berryman | MaraDB-10 | X86 | https://theberrymans.com/php_kits/ | client only | SSL3$ |
Visit my OpenVMS source code area to learn how to compile and link (includes: Berryman MariaDB, VSI MariaDB, and LibMariaDB)
SSL Libraries on OpenVMS (common locations only) | |||
Location | Prefix | Package | Notes |
---|---|---|---|
SYS$Library |
SSL_ | usually unofficial creations (eg. http://polarhome.com) | |
SSL$ | <= OpenSSL-0.9 |
official HP/HPE | |
SSL1$ | >= OpenSSL-1.0 |
official HP/HPE | |
SSL111$ | OpenSSL-1.1.1 |
official VSI |
|
SSL3$ | Newer FIPS stuff |
official VSI |
password caveat: in simpler days, database passwords were meant to be: alphabetic, numeric or alphanumeric. Passwords today are allowed to contain so-called strange characters. If your password contains any strange characters like a space or a dollar sign, then remember to quote the password when connecting from the mysql client
legend: <sr> = system response <ur> = user response ------------------------------------------------------------------------------------------ <sr> $ ! my DCL prompt <ur> set term/width=132/nowrap ! <sr> $ ! <ur> mysql -uroot ! connect as user "root" (no password) ! alternate syntax: "--user=root" <sr> Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 25 Server version: 5.5.25-MariaDB-log Source distribution This software comes with ABSOLUTELY NO WARRANTY. This is free software, and you are welcome to modify and redistribute it under the GPL v2 license Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> ! my MariaDB prompt <ur> use mysql ! switch to the master database <sr> Database changed MariaDB [mysql]> ! new MariaDB prompt <ur> select host, user, password from user; ! inspect table: user <sr> +-------------------+------+----------+ | host | user | password | +-------------------+------+----------+ | localhost | root | | | kawc09.on.bell.ca | root | | | 127.0.0.1 | root | | | ::1 | root | | | localhost | | | | kawc09.on.bell.ca | | | +-------------------+------+----------+ 6 rows in set (0.00 sec) MariaDB [mysql]>
<ur> create user neil@localhost identified by 'yada123'; ! note: pass=yada123 <sr> Query OK, 0 rows affected (0.00 sec) MariaDB [mysql]> ! <ur> grant ALL on *.* to neil@localhost with grant option; ! now apply some privs <sr> Query OK, 0 rows affected (0.00 sec) MariaDB [mysql]> ! <ur> select host,user,password from user; ! generate a query <sr> +-------------------+------+-------------------------------------------+ | host | user | password | +-------------------+------+-------------------------------------------+ | localhost | root | | | kawc09.on.bell.ca | root | | | 127.0.0.1 | root | | | ::1 | root | | | localhost | | | | kawc09.on.bell.ca | | | | localhost | neil | *CE6FFA38DBB56C2B064706A7C4402CA7B7D0E9E8 | +-------------------+------+-------------------------------------------+ 7 rows in set (0.00 sec) MariaDB [mysql]> <ur> exit; <sr> Bye $ ! my DCL prompt ------------------------------------------------------------------------------------ <ur> mysql --user=neil --password=yada123 ! this works (and it should) ------------------------------------------------------------------------------------ <ur> mysql --user=neil --password=passwd124 ! this fails (and it should) ------------------------------------------------------------------------------------
<sr> $ ! my prompt <ur> mysql --user=root mysql ! connect as "root" to database "mysql" <sr> MariaDB [mysql]> <ur> update user set password=password('1234') where user='neil'; <sr> Query OK, 1 row affected (0.01 sec) Rows matched: 1 Changed: 1 Warnings: 0 MariaDB [mysql]> <ur> exit; <sr> Bye $ ----------------------------------------------------------------------------------- <ur> mysql --user=neil --password=1234 ! fails (and it should not) ----------------------------------------------------------------------------------- <ur> mysql --user=neil --password=yada123 ! works (and it should not) -----------------------------------------------------------------------------------
<sr> $
<ur> mysql -uroot ! connect as user "root" (no password)
! alternate syntax "--user=root"
<sr> MariaDB [none]>
<ur> flush privileges;
<sr> Query OK, 0 rows affected (0.00 sec)
MariaDB [none]>
<ur> exit;
<sr> Bye
$
-------------------------------------------------------------------------------
<ur> mysql --user=neil --password=1234 ! works (and it should)
-------------------------------------------------------------------------------
<sr> MariaDB [mysql]>
<ur> select host,user,password from user;
<sr> +-------------------+----------+-------------------------------------------+
| host | user | password |
+-------------------+----------+-------------------------------------------+
| localhost | root | |
| kawc09.on.bell.ca | root | |
| 127.0.0.1 | root | |
| ::1 | root | |
| localhost | | |
| kawc09.on.bell.ca | | |
| localhost | neil | *5D8EF4B0222013574A34CEBDCB462CDC61C44754 |
| kawc0g.on.bell.ca ! neil | *5D8EF4B0222013574A34CEBDCB462CDC61C44754 |
| % | neil | *5D8EF4B0222013574A34CEBDCB462CDC61C44754 |
+-------------------+----------+-------------------------------------------+
9 rows in set (0.03 sec)
MariaDB [mysql]>
To show the current date and time from internal functions: select curdate(); select curtime(); select now(); To display engine variables beginning with the letter 'v': show variables like 'v%'; -+- these two commands produce the same result show variables like 'v%' \g -+ (because '\g' is a synonym for ';') show variables like 'v%' \G --- returns results without a pseudo-graphic box To display all the databases: show databases; To display all the tables within database mysql: this command: show tables from mysql; is the same as these two: use mysql; show tables; To display technical details about table mysql.user: this command: describe mysql.user; is the same as these two: use mysql; describe user; To display all data within a table: this command: select * from mysql.user; is the same as these two: use mysql; select * from user; To display selected fields from within a table: select host,user,password from mysql.user; To display desired records from within a table: select host,user,password from mysql.user where user='neil'; To display desired records (via wildcard) from within a table: select host,user,password from mysql.user where user like 'n%'; (starts with: n ) select host,user,password from mysql.user where user like '%l'; (ends with: l ) select host,user,password from mysql.user where user like '%ei%'; (contains: ei ) select host,user,password from mysql.user where ucase(user) like 'N%'; (returns: neil, Neil, etc.) To locate a specifically named field as if it were data: select * from information_schema.columns where table_name='contract' and column_name like 'neil%'; select * from information_schema.columns where table_name='contract' and column_name like '%neil%'; select * from information_schema.columns where table_name='contract' and column_name like '%neil'; To display the execution plan of various queries: use mysql; explain select password from user; (extra: blank) explain select host from user; (extra: Using index) explain select host from user order by host; (extra: Using index) explain select user from user; (extra: Using index) explain select user from user order by user; (extra: Using index; Using filesort) Comment about keys vs. indexes: 1) some databases treat keys and indexes as different objects. For example, Oracle-RDB treats keys as the objects on which you hang constraints. When you create a key with this database engine you are not creating an index. That requires an additional command. 2) both MySQL and MariaDB treat keys and indexes as synonyms. Constraints and collating sequences are just optional items associated with the index-key compound widget. This is reminiscent of older ISAM products like RMS from Digital Equipment Corporation and CICS (pronounced "kicks") from IBM 3) in both MySQL and MariaDB be sure to include the index field in your select AND include an "order by" clause. For example in this demo "pin" is PRIMARY KEY indexed but the resulting displays will be totally different from each other a) select first_name, last_name from profile order by pin; b) select * from profile order by pin; c) select *; Why is this important? When a primary key is defined in ISAM-RMS the natural retrieval is always done by primary key. With both MySQL and MariaDB the engine always takes the least energetic path. It requires more energy to "scan by index then jump around retrieving records" than "just beginning at the first record then reading until the last record" To see the indexes associated with a user: show indexes from user; (Host, User) To see the indexes associated with a table (method #1): show indexes from icsis.status_tech_tracking; To see the indexes associated with a table (method #2): select * from information_schema.statistics where table_schema = 'icsis' and table_name = 'status_tech_tracking'; select * from information_schema.statistics where table_schema = 'icsis' and table_name = 'status_tech_tracking' \G describe information_schema.statistics; select table_name, index_name, column_name from information_schema.statistics where table_schema = 'icsis' and table_name = 'status_tech_tracking'; select distinct table_name, index_name, column_name from information_schema.statistics where table_schema = 'icsis' and table_name = 'status_tech_tracking'; To see available storage engines: show engines; (MEMORY, MRG_MYISAM, MyISAM, BLACKHOLE, CSV, Aria, ARCHIVE, FEDERATED, InnoDB, PERFORMANCE_SCHEMA, SPHINX) Duplicate a table so you can hack: use icsis; (switch to database 'icsis') create table yada like profile; (create table 'yada' using table 'profile' as a template) insert into yada select * from profile; (copy all data from table profile to table yada)
1) Stopping a "runaway" or "run-too-long" transaction Problem: A very complicated command may take forever to execute (while consuming 100% of the server's resources) but killing the client process which issued the command will not stop the associated transaction. Here is how you can regain control. Caveat: What I previously thought was a runaway transaction turned out to be a run-too-long transaction. We were doing a multi-table join but one of the columns was declared as UTF-8 whilst the other was declared as latin1 (a.k.a. ISO-8859-1). When MariaDB detects this situation (comparing apples to oranges), it ignores the offending index then attempts to process the transaction using raw uncollated (unindexed) data. If the table is large then it might appear to take forever. (oops!) <sr> $ <ur> mysql --user=neil --password=yada123 <sr> MariaDB [(none)]> <ur> show processlist; <sr> +---------+-------+----------------------+----------+---------+---------+--------------------------------+---------------+ | Id | User | Host | db | Command | Time | State | Info | +---------+-------+----------------------+----------+---------+---------+--------------------------------+---------------+ | 1816400 | dave | d40che.bell.ca:54664 | onuadmin | Sleep | 276 | | NULL | | 1816401 | dave | d40che.bell.ca:54665 | icsis | Sleep | 276 | | NULL | | 1846611 | dave | d40che.bell.ca:54753 | NULL | Sleep | 1908905 | | NULL | | 2021829 | neil | localhost:3568 | onuadmin | Query | 1321 | Sending data | create table r| | 2021951 | neil | localhost:3220 | onuadmin | Query | 690 | Waiting for table metadata lock| select* from r| | 2021955 | neil | localhost:4124 | onuadmin | Query | 641 | Waiting for table metadata lock| select count(*| | 2021959 | vince | d6hcjd.bell.ca:52609 | onuadmin | Query | 594 | Waiting for table metadata lock| SHOW COLUMNS F| | 2021960 | vince | d6hcjd.bell.ca:52610 | onuadmin | Sleep | 323 | | NULL | | 2021962 | neil | localhost:4715 | NULL | Query | 0 | NULL | show processli| | 2022035 | vince | d6hcjd.bell.ca:52701 | NULL | Sleep | 255 | | NULL | | 2022036 | vince | d6hcjd.bell.ca:52702 | NULL | Sleep | 2 | | NULL | +---------+-------+----------------------+----------+---------+---------+--------------------------------+---------------+ MariaDB [(none)]> <ur> kill 2021829; comment: "kill" is a shell command seen in UNIX or Linux. At this point you should be thinking: MySQL/MariaDB is a lot like having an OS within an OS 2) Light Maintenance (no locking) $ mysql --user=neil --password=yada123 steps: create new indexes; drop old indexes; execution plans will shift to new indexes; 3) Medium Maintenance (minimal locking) $ mysql --user=neil --password=yada123 show databases; use database whatever; analyze table yada; optimize table yada; 4) Heavy Maintenance (locking) mysqlcheck --help # view the plethora of options # including: -q and -e mysqlcheck --user=neil --pass=yada123 -c --all-databases # check all tables in all databases mysqlcheck --user=neil --pass=yada123 -C --all-databases # check changed tables in all databases mysqlcheck --user=neil --pass=yada123 -o --all-databases # optimize all databases 5) To shut down MySQL-5.1/and MariaDB-5.5-25( add these to script sys$manager:SYSHUTDWN.COM ) $ mysqladmin --user=neil --pass=yada123 ping ! are you there? $ mysqladmin --user=neil --pass=yada123 ver ! display stats $ mysqladmin --user=neil --pass=yada123 refresh ! flushes a lot of stuff to disk $ mysqladmin --user=neil --pass=yada123 status ! display stats one-liner $ mysqladmin --user=neil --pass=yada123 shutdown ! should not see any error messages here $ wait 0:0:05 ! this 5-second delay is necessary $ mysqladmin --user=neil --pass=yada123 shutdown ! this second step is necessary ... $! $! ... you will see an error message which can be blocked by including the "--silent" switch; $! the MariaDB_Server process will usually exit within 10-20 minutes; $! $! see InnoDB caveats further down this web page $! see MariaDB-5 shutdown problems further down this web page 6) Test for corrupt Tables (assumes you have brought up the server on port 8080): $ mysqlcheck --user=neil --pass=yada123 --port=8080 --fast --all-databases # check tables not properly closed $ mysqlcheck --user=neil --pass=yada123 --port=8080 -c --quick --all-databases # quick check all tables in all db $ mysqlcheck --user=neil --pass=yada123 --port=8080 -C --quick --all-databases # quick check changed tables $ mysqlcheck --user=neil --pass=yada123 --port=8080 -c --all-databases # normal check $ mysqlcheck --user=neil --pass=yada123 --port=8080 -c --extended --all-databases # extended check 7) Repair Corrupt Table (real world example; table must be MyISAM; not InnoDB) <ur> mysqlcheck --user=neil --pass=yada123 --port=8080 --repair mysql columns_priv <sr> mysql.columns_priv warning : Number of rows changed from 0 to 129 status : OK $! standalone recovery tools exist for MyISAM (the database does not need to be running) 8) Database backup (logical) $ mysqldump --user=neil --pass=yada123 --port=8080 --result-file=icsis.sql --databases icsis 9) Database restore $ mysqladmin --user=neil --pass=yada123 --port=8080 --force drop material # drop corrupt database $ mysqladmin --user=neil --pass=yada123 --port=8080 create database icsis # create new database $ mysql --user=neil --pass=yada123 --port=8080 -e "source icsis.sql" icsis # restore 10) Purging binary logs caveat: it is dangerous to use the OS to delete files in the 'log' folder <ur> mysql --user=neil --pass=yada123 <sr> MariaDB [(none)]> <ur> show master logs; <sr> +--------------------+-----------+ | Log_name | File_size | +--------------------+-----------+ | mariadb-bin.000001 | 290 | | mariadb-bin.000002 | 264 | ~ | mariadb-bin.000011 | 264 | | mariadb-bin.000012 | 245 | +--------------------+-----------+ MariaDB [(none)]> <ur> purge master logs before current_date - interval 1 day; Query OK, 0 rows affected (0.31 sec) MariaDB [(none)]> <sr> show master logs; +--------------------+-----------+ | Log_name | File_size | +--------------------+-----------+ | mariadb-bin.000012 | 245 | +--------------------+-----------+ 1 row in set (0.00 sec) MariaDB [(none)]>
Starting a server that will not remain running $ set def MYSQL055_ROOT:[000000.vms] $ edit file: my.cnf insert these directives under [mysqld] innodb_force_recovery=1 # or 2-3 (safe) then 4-6 (dangerous); always try lower levels first innodb_purge_threads=0 # port=8080 # switch to some non-production port $ @start_mysqld.com $! $! innodb_force_recovery notes: $! 0: Production (tables can be written/modified) $! 1 to 6: Recovery mode (tables cannot be written or modified but can be dropped) $! Use the lowest level that allows the server to run and no higher $! Tables can be dumped to files (emergency backup before table rebuild) $! 4-6 are dangerous and can cause data loss so only use them in an emergency $! 1) After startup in recovery mode, consider an immediate shutdown to inspect messages logged in files $! under folder "MYSQL055_ROOT:[mysql_server]". These messages should point you in the correct $! direction. For example, myisamchk can be used to repair MyISAM tables when MariaDB is not running $! mysqlcheck can be used to repair most tables when MariaDB is running $! 2) Recovery mode is not magic (it only turns off some internal checks) so you now have limited options $! a) restart the database in recovery mode then use mysqldump to make logical backups of all your $! databases. These will be used to do a hard recovery if required. $! b) shutdown MariaDB $! c) backup everything under: $! MYSQL055_ROOT:[data] # which holds your database tables $! MYSQL055_ROOT:[log] # which holds your transaction files $! d) if you have corrupt tables then you might wish should attempt a repair first (success rate: 75%) $! e) if you do not have corrupt tables but have some sort of InnoDB problem then you might wish to $! try this (success rate is 33%) before doing a drop/recover: $! 1) delete all the binary logs of the form: mariadb-bin.* then try a restart $! deleting is safe because you made a backup, right? $! 2) if that does not work then also delete the redo files (ib_logfile0. and ib_logfile1.) $! deleting is safe because you made a backup, right? $! Caveat: do not delete other files in the [.log] folder $! f) if "step-E" did not work then consider starting mariadb then dropping all the tables (or whole $! databases) before attempting a hard recovery from your logical backups this should work but will $! be time consuming (perhaps you should have been using master/slave replication) $! g) if "step-F" did not work then delete everything under: $! MYSQL055_ROOT:[data] # which holds your database tables $! MYSQL055_ROOT:[log] # which holds your transaction files $! now invoke your original setup script (previous was only used during the initial installation) $! beware: the script usually copies over a new version of my.cnf $! Now do a hard recovery from here
-- file : neil_sp_demo_1.sql -- target: mysql-5.5 / mariadb-5.5 -- notes : this is not a stored procedure but it demos session variables -- ===================================================================== use icsis; -- this is a simple row counter select count(*) from profile; -- this same code employs an intermediate session variable ('sv_' prefix for my sanity) set @pv_temp1 = 0; select count(*) from profile into @sv_temp1; select @sv_temp1;
-- title : NEIL_SP_DEMO_2.SQL -- target: mysql-5.5 / mariadb-5.5 -- notes : this stored procedure implements a cursor which does nothing special -- : nothing is formally passed to/from the procedure but a session variable is modified -- =========================================================================================== use icsis; drop procedure if exists neil_sp_demo2; delimiter || create procedure neil_sp_demo2() begin -- need some local variables ('lv_' prefix is for my sanity) declare lv_stop INT; declare lv_my_count INT; declare lv_last_name char(25); declare lv_first_name char(25); declare lv_cur cursor for select last_name, first_name from profile; declare continue handler for not found set lv_stop = 1 ; -- init my session variable ('sv_' prefix is for my sanity) set @sv_nsr_temp = 0; open lv_cur ; set lv_stop = 0 ; set lv_my_count = 0 ; while (lv_stop = 0) do fetch lv_cur into lv_last_name, lv_first_name; if (lv_stop = 0) then -- count the records sessioned set lv_my_count = lv_my_count + 1; select lv_last_name, lv_first_name, lv_my_count; end if; end while; close lv_cur; -- copy to session variable before exit (ugh) set @sv_nsr_temp = lv_my_count; end|| delimiter ; -- okay, time to test the procedure call neil_sp_demo2;
-- title : NEIL_SP_DEMO_3.SQL -- target: mysql-5.5 / mariadb-5.5 -- notes : need to breakout a decimal value into bits -- ================================================== use icsis; drop procedure if exists neil_sp_demo3; delimiter || create procedure neil_sp_demo3(in lv_data INT) begin -- need some local variables ('lv_' prefix is for my sanity) declare lv_bits INT; declare lv_temp INT; set lv_bits = 31; while (lv_bits >= 0) do if (lv_data & pow(2, lv_bits)) <> 0 then select lv_bits as "bit", "was set" as "state"; else select lv_bits as "bit", "was clear" as "state"; end if; set lv_bits = (lv_bits - 1); end while; end|| delimiter ; -- okay, time to test the procedure call neil_sp_demo3(9);
mysql --print-defaults
mysql --no-defaults --help --verbose
... then notice that "character_set = auto"$ mysql --no-defaults -udilbert -psecret -hkawc4m.on.bell.ca { stuff chopped out } MariaDB [icsis]> show global variables where Variable_name like '%char%' \g +--------------------------+----------------------------+ | 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/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec) MariaDB [icsis]> show session variables where Variable_name like '%char%' \g +--------------------------+----------------------------+ | Variable_name | Value | +--------------------------+----------------------------+ | character_set_client | latin1 | | character_set_connection | latin1 | | character_set_database | utf8 | | character_set_filesystem | binary | | character_set_results | latin1 | | character_set_server | utf8 | | character_set_system | utf8 | | character_sets_dir | /usr/share/mysql/charsets/ | +--------------------------+----------------------------+ 8 rows in set (0.00 sec) MariaDB [icsis]>
MariaDB [(none)]> show status like '%max%'; +-----------------------------------+-----------+ | Variable_name | Value | +-----------------------------------+-----------+ | Connection_errors_max_connections | 2 | | Innodb_checkpoint_max_age | 80826164 | | Innodb_max_trx_id | 164571514 | | Innodb_row_lock_time_max | 51266 | | Max_statement_time_exceeded | 0 | | Max_used_connections | 152 | | Tc_log_max_pages_used | 0 | +-----------------------------------+-----------+ 7 rows in set (0.00 sec) MariaDB [(none)]> show variables like 'max_con%'; +--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | max_connect_errors | 100 | | max_connections | 151 | +--------------------+-------+ 2 rows in set (0.00 sec) MariaDB [(none)]>
MariaDB [(none)]> SET GLOBAL max_connections = 512; MariaDB [(none)]>
This stuff used to be part of the section above titled "MySQL + MariaDB Tips". I have no idea if this bug was specific to MariaDB-5.5-25 on OpenVMS but it was never seen on MariaDB-10.0-19 on CentOS-7. Anyway, I keep this stuff here for a while in case some other poor devil experiences the same madness.
150825 13:05:19 InnoDB: highest supported file format is Barracuda. InnoDB: The log sequence number in ibdata files does not match InnoDB: the log sequence number in the ib_logfiles! 150825 13:05:19 InnoDB: Database was not shut down normally! InnoDB: Starting crash recovery. InnoDB: Reading tablespace information from the .ibd files... InnoDB: Restoring possible half-written data pages from the doublewrite InnoDB: buffer... InnoDB: Last MySQL binlog file position 0 14202570, file name /mysql055_root/log/mariadb-bin.000011 150825 13:05:25 InnoDB: Waiting for the background threads to start %SYSTEM-F-STKOVF, stack overflow, PC=0000000000DA09E0, PS=0000001B %TRACE-F-TRACEBACK, symbolic stack dump follows image module routine line rel PC abs PC MYSQLD rem0rec rec_get_offsets_func 95152 0000000000000CE0 0000000000DA09E0 MYSQLD page0cur page_cur_search_with_match 105075 0000000000001414 0000000000D82D34
1) (consider) excluding some files from XFC (the OpenVMS extended file cache) $ SET DEF MYSQL055_ROOT:[000000] $ set file /CACHING_ATTRIBUTE=no_cach data.dir/log $ set file /CACHING_ATTRIBUTE=no_cach [data...]*.*/log $ set file /CACHING_ATTRIBUTE=no_cach log.dir/log $ set file /CACHING_ATTRIBUTE=no_cach [log...]*.*/log reference: http://h30266.www3.hp.com/odl/axpos/opsys/vmsos84/aa_pv5nj_tk/aa_pv5nj_tk.HTML quote: Disabling Caching for a File To prevent XFC to from caching a particular file, such as a database file, set the caching attribute of the file to no caching. 2) (consider) excluding all files from XFC (the OpenVMS extended file cache) $ SET DEF MYSQL055_ROOT:[000000] $ set file /CACHING_ATTRIBUTE=no_cach *.*/log $ set file /CACHING_ATTRIBUTE=no_cach [...]*.*/log
1) $mysqladmin --user=root --password=yada123 flush-tables 2) $mysqladmin --user=root --password=yada123 flush-logs 3) $mysqladmin --user=root --password=yada123 refresh ! flush a lot of stuff to disk 4) $show system/proc=mariadb* ! find MariaDB's PID (Process ID) 5) $stop /id=PID ! kill the MariaDB_Server
While I believe that RMS will be around forever (it must, since it is the basis for SYSUAF on OpenVMS), I am also convinced that it has outlived its usefulness in many modern applications. With MySQL and MariaDB it is just too easy to "add, remove and expand columns on the fly". I have shown above that you can dumb-down MySQL and MariaDB but it will still be smarter and more useful than RMS (at least without the help of ACMS and/or application software). Even a dumbed-down relational database engine can provide you with:
to only name three of many. Think of this as a RMS++ or super RMS or a poor man's Oracle-Rdb. Now I do not recommend you jump in with both feet. Set up MySQL or MariaDB then play with it for a month or two before loading it with stuff you wouldn't care if you lost (like operational reports).
Experiences (up to 2016-11-xx)
Recent Events (2016-11-xx)
Recent Events (2016-12-xx)
Recent Events (2017-02-xx)
Sometimes installing an SQL-compliant storage engine is overkill. If your code is written in C/C++ then consider SQLite which is a set of libraries you include into your C program to give it SQL capabilities.
Character Sets
Acronyms
Business over the web (an OpenVMS future without VT-100 terminals)
Bootstraps for your brain
C/C++ programmers writing small applications should consider SQLite