To create the database and grant default permission to pmacctd you have to execute
the two scripts below, in the same order (assuming mysql command is in the path):

- To create v1 tables:
  * mysql -u root -p < pmacct-create-db_v1.mysql
  * mysql -u root -p < pmacct-grant-db.mysql

- To use v1 tables:
  * data will be available in 'acct' table of 'pmacct' DB.
  * Add 'sql_table_version: 1' line to your configuration.

Similarly, v2 to v7 tables: 

- To create v2 tables:
  * mysql -u root -p < pmacct-create-db_v2.mysql
  * mysql -u root -p < pmacct-grant-db.mysql

- To use v2 tables:
  * data will be available in 'acct_v2' table of 'pmacct' DB.
  * Add 'sql_table_version: 2' line to your configuration.

[ ... ]

- To create v7 tables:
  * mysql -u root -p < pmacct-create-db_v7.mysql
  * mysql -u root -p < pmacct-grant-db.mysql

- To use v7 tables:
  * data will be available in 'acct_v7' table of 'pmacct' DB.
  * Add 'sql_table_version: 7' line to your configuration.

Similarly, BGP tables:

- To create BGP v1 tables:
  * mysql -u root -p < pmacct-create-db_bgp_v1.mysql
  * mysql -u root -p < pmacct-grant-db.mysql

- To use BGP v1 tables:
  * data will be available in 'acct_bgp' table of 'pmacct' DB.
  * Add 'sql_table_version: 1' line to your configuration.
  * Add 'sql_table_type: bgp' line to your configuration.

- To understand difference between the various table versions:
  * Do you need any of the BGP primitives ? Then look the next section.
  * Do you need TCP flags ? Then you have to use v7.
  * Do you need both IP addresses and AS numbers in the same table ? Then you have to use v6.
  * Do you need packet classification ? Then you have to use v5.
  * Do you need flows (other than packets) accounting ? Then you have to use v4.
  * Do you need ToS/DSCP field (QoS) accounting ? Then you have to use v3.
  * Do you need agent ID for distributed accounting and packet tagging ? Then you have to use v2. 
  * Do you need VLAN traffic accounting ? Then you have to use v2.
  * If all of the above points sound useless, then use v1.

- To understand difference between the various BGP table versions:
  * Only BGP table v1 is currently available.

- Aggregation primitives to SQL schema mapping:
  Aggregation primitive => SQL table field
  * tag => agent_id (INT(4) UNSIGNED NOT NULL)
  * tag2 => agent_id2 (INT(4) UNSIGNED NOT NULL, see README.agent_id2)
  * src_as => as_src (INT(4) UNSIGNED NOT NULL)
  * dst_as => as_dst (INT(4) UNSIGNED NOT NULL)
  * peer_src_as => peer_as_src (INT(4) UNSIGNED NOT NULL)
  * peer_dst_as => peer_as_dst (INT(4) UNSIGNED NOT NULL)
  * peer_src_ip => peer_ip_src (CHAR(15) NOT NULL, see README.IPv6)
    - peer_src_ip => peer_ip_src (INT(4) UNSIGNED NOT NULL, if sql_num_hosts: true)
  * peer_dst_ip => peer_ip_dst (CHAR(15) NOT NULL, see README.IPv6)
    - peer_dst_ip => peer_ip_dst (INT(4) UNSIGNED NOT NULL, if sql_num_hosts: true)
  * mpls_vpn_rd => mpls_vpn_rd (CHAR(18) NOT NULL)
  * std_comm => comms (CHAR(24) NOT NULL)
  * ext_comm => comms (CHAR(24) NOT NULL)
  * as_path => as_path (CHAR(21) NOT NULL)
  * local_pref => local_pref (INT(4) UNSIGNED NOT NULL)
  * med => med (INT(4) UNSIGNED NOT NULL)
  * src_std_comm => comms_src (CHAR(24) NOT NULL)
  * src_ext_comm => comms_src (CHAR(24) NOT NULL)
  * src_as_path => as_path_src (CHAR(21) NOT NULL)
  * src_local_pref => local_pref_src (INT(4) UNSIGNED NOT NULL)
  * src_med => med_src (INT(4) UNSIGNED NOT NULL)
  * in_iface => iface_in (INT(4) UNSIGNED NOT NULL, see README.iface)
  * out_iface => iface_out (INT(4) UNSIGNED NOT NULL, see README.iface)
  * src_mask => mask_src (INT(1) UNSIGNED NOT NULL, see README.mask)
  * dst_mask => mask_dst (INT(1) UNSIGNED NOT NULL, see README.mask)
  * cos => cos (INT(1) UNSIGNED NOT NULL, see README.cos)
  * etype => etype (INT(2) UNSIGNED NOT NULL, see README.etype)
  * class => class_id (CHAR(16) NOT NULL)
  * src_mac => mac_src (CHAR(17) NOT NULL)
  * dst_mac => mac_dst (CHAR(17) NOT NULL)
  * vlan => vlan (INT(2) UNSIGNED NOT NULL)
  * src_as => as_src (INT(4) UNSIGNED NOT NULL)
  * dst_as => as_dst (INT(4) UNSIGNED NOT NULL)
  * src_host => ip_src (CHAR(15) NOT NULL, see README.IPv6)
    - src_host => ip_src (INT(4) UNSIGNED NOT NULL, if sql_num_hosts: true)
  * dst_host => ip_dst (CHAR(15) NOT NULL, see README.IPv6)
    - dst_host => ip_dst (INT(4) UNSIGNED NOT NULL, if sql_num_hosts: true)
  * src_net => ip_src (CHAR(15) NOT NULL, see README.IPv6)
    - src_net => ip_src (INT(4) UNSIGNED NOT NULL, if sql_num_hosts: true)
  * dst_net => ip_dst (CHAR(15) NOT NULL, see README.IPv6)
    - dst_net => ip_dst (INT(4) UNSIGNED NOT NULL, if sql_num_hosts: true)
  * src_port => src_port (INT(2) UNSIGNED NOT NULL)
    - src_port => port_src (INT(2) UNSIGNED NOT NULL, if sql_table_version: 8)
  * dst_port => dst_port (INT(2) UNSIGNED NOT NULL)
    - dst_port => port_dst (INT(2) UNSIGNED NOT NULL, if sql_table_version: 8)
  * tcpflags => tcp_flags (INT(4) UNSIGNED NOT NULL)
  * proto => ip_proto (CHAR(6) NOT NULL)
    - proto => ip_proto (INT(1) UNSIGNED NOT NULL, if sql_num_protos: true)
  * tos => tos (INT(4) UNSIGNED NOT NULL)

- Counters and time reference need always to be defined as part of the SQL schema:
  * packets (INT UNSIGNED NOT NULL)
  * bytes (BIGINT UNSIGNED NOT NULL)
  * stamp_inserted (DATETIME NOT NULL, enabled by sql_history)
  * stamp_updated (DATETIME, enabled by sql_history)

NOTE: mind to specify EVERYTIME which SQL table version you
intend to adhere to by using either of the following rules:

When using commandline options:
  * -v [ 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 ]

When using configuration directives:
  * sql_table_version: [ 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 ]
  * sql_table_type: [ bgp ] 

NOTE: specifying a non-documented SQL table profile will result
in an non-determined behaviour. Unless this will create crashes
to the application, such situations will not be supported.
